天天看點

TextView 自定義在右上角加圖示

最近有個需求是:在字型的右上角在一個感歎号圖示:

TextView 自定義在右上角加圖示

其實也有很多小紅點的需求,網上找到的是在布局上動手腳,我覺得不合适,這樣不能複用下去,思路是:

繼承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。 我前提是文字是居中顯示的。如果預設居左居頂部的話自己改動、 這就大概的邏輯。

轉載請标記文章原處