最近有個需求是:在字型的右上角在一個感歎号圖示:
其實也有很多小紅點的需求,網上找到的是在布局上動手腳,我覺得不合适,這樣不能複用下去,思路是:
繼承TextView 然後重寫OnDraw,最主要的是計算該圖示所放置的位置,知道之後然後drawable.draw(canvas)就可以了;
直接粘上代碼:
canvas.save();
Drawable drawable = VersionUtil.getDrawable(getContext(), R.drawable.take_care_of);
drawable.setBounds(,,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()-getLayout().getLineBottom())/;
float left = getScrollX()
+getLeft()+ getLayout().getParagraphLeft()+trueWidth+drawableWidth/;
float top =getScrollY() + getPaddingTop()+getCompoundPaddingTop()+topMargin-drawableheight/;
canvas.translate(left,top);
drawable.draw(canvas);
canvas.restore();
TextView中所描繪字型主要在Layout中的Editor裡面的onDraw方法,那麼擷取到就可以擷取到layout的各個屬性參數值,一開始主要是模仿drawableRight的寫法獲得了基本的參數,然後是擷取文字結尾處的X坐标的值,這個值可以第一段行的起點加上該文字的長度。Y軸上,主要擷取文字頂部和框框頂部那空白區的高度:可以用整個高度減去(第一行的底部-第一行的頂部)然後除以2。 我前提是文字是居中顯示的。如果預設居左居頂部的話自己改動、 這就大概的邏輯。
轉載請标記文章原處