自定义TextView-显示一串五颜六色的字符串

自定义TextView-显示一串五颜六色的字符串

 

android的TextView控件是用来显示字符串的,我们为字符设置颜色的时候只能对整个字符串设置颜色,比如textview.setTextColor(Color.Red),那么整个字符串都是红色的。如果我们想为字符串中的某些字符设置颜色,怎么办呢,原生android没有提供先关的API,我们只能自己自定义TextView了。思路如下:

1、当然要重写onDraw函数了,这就是套路了。

2、显示文字调用的是canvas.drawText(String text,float x, float y, Paint paint),(x,y)表示的真正画字的坐标原点,x和y的取值是相对于TextView的左上角的,y的值就是baseline。

3、我是一个字符一个字符的去画的,画每个字符之前为paint设置好颜色,剩下的重点就是如何设置每个字符的基准坐标,首先是y是不变的,要确定x的值,就要确定以显示过的字符的最小宽度,这里用到了paint. getTextBounds方法,这个方法可以返回要显示字符的所需要的最小矩形,进而我们就得到了矩形的宽度width,把x的值加width就ok了。

下面上代码:

 

public classMyTextView extendsTextView{
   
private StringTAG= "MyTextView";
    private
Paint mPaint;
    private
Context mContext;
    private int
[] colors= {Color.RED,Color.BLACK,Color.BLUE,Color.GRAY};

    public
MyTextView(Contextcontext,AttributeSet attrs) {
       
super(context,attrs);
       
mContext =context;
       
mPaint =new Paint();
   
}

   
@Override
   
protected void onDraw(Canvas canvas) {
       
//super.onDraw(canvas);
       
Log.d(TAG,"onDraw");
       
String text = "test";
        char
[] chars = text.toCharArray();
       
mPaint.setAntiAlias(true);
       
mPaint.setTextSize(DensityUtil.dip2px(mContext,18));
        int
width = 0;
        for
(inti = 0;i <4;i++)
        {
           
mPaint.setColor(colors[i]);
           
canvas.drawText(chars[i]+"",width+10,200,mPaint);
           
Rect rect = newRect();
            
mPaint.getTextBounds(chars[i]+"",0,1,rect);
           
width += rect.width()+10;
       
}
    }
}

 

运行截图如下:

 

注意:就是如果选取的基准点(x,y)不在TextView之内,字符是显示不出来的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android海纳百川

打赏加微信,送跑车加管理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值