TextView 自定义在右上角加图标

最近有个需求是:在字体的右上角在一个感叹号图标:
这里写图片描述
其实也有很多小红点的需求,网上找到的是在布局上动手脚,我觉得不合适,这样不能复用下去,思路是:
继承TextView 然后重写OnDraw,最主要的是计算该图标所放置的位置,知道之后然后drawable.draw(canvas)就可以了;
直接粘上代码:

canvas.save();
            Drawable drawable = VersionUtil.getDrawable(getContext(), R.drawable.take_care_of);
            drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
            int drawableWidth = drawable.getIntrinsicWidth();
            int drawableheight = drawable.getIntrinsicHeight();
            float width = getPaint().measureText(getText().toString());
            float trueWidth = width<getMeasuredWidth()?width:getMeasuredWidth();
            float topMargin = (getHeight() +getLayout().getLineTop(0)-getLayout().getLineBottom(0))/2;
            float left = getScrollX()
                    +getLeft()+ getLayout().getParagraphLeft(0)+trueWidth+drawableWidth/2;
            float top =getScrollY() + getPaddingTop()+getCompoundPaddingTop()+topMargin-drawableheight/2;
            canvas.translate(left,top);
            drawable.draw(canvas);
            canvas.restore();

TextView中所描绘字体主要在Layout中的Editor里面的onDraw方法,那么获取到就可以获取到layout的各个属性参数值,一开始主要是模仿drawableRight的写法获得了基本的参数,然后是获取文字结尾处的X坐标的值,这个值可以第一段行的起点加上该文字的长度。Y轴上,主要获取文字顶部和框框顶部那空白区的高度:可以用整个高度减去(第一行的底部-第一行的顶部)然后除以2。 我前提是文字是居中显示的。如果默认居左居顶部的话自己改动、 这就大概的逻辑。

转载请标记文章原处

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值