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;
            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。 我前提是文字是居中显示的。如果默认居左居顶部的话自己改动、 这就大概的逻辑。

转载请标记文章原处

你可能感兴趣的:(android)