重写TextView给文字描边

来源:互联网 发布:mac虚拟机哪个好 编辑:程序博客网 时间:2024/05/16 07:05

给文字描边的一个简单实现原理就是先写一个大的文字,再写一个小的文字贴在大的上面就可以实现文字描边的原理,下面就是重写TextView的一个简单类,直接复制创建就可以拿来使用了,在xml声明即可;



public class StrokeTextView extends TextView {    private TextView borderText = null;///用于描边的TextView    public StrokeTextView(Context context) {        super(context);        borderText = new TextView(context);        init();    }    public StrokeTextView(Context context, AttributeSet attrs) {        super(context, attrs);        borderText = new TextView(context,attrs);        init();    }    public StrokeTextView(Context context, AttributeSet attrs,                          int defStyle) {        super(context, attrs, defStyle);        borderText = new TextView(context,attrs,defStyle);        init();    }    public void init(){        TextPaint tp1 = borderText.getPaint();        tp1.setStrokeWidth(4);                                  //设置描边宽度        tp1.setStyle(Paint.Style.STROKE);                             //对文字只描边        borderText.setTextColor(getResources().getColor(R.color.red));  //设置描边颜色        borderText.setGravity(getGravity());    }    @Override    public void setLayoutParams (ViewGroup.LayoutParams params){        super.setLayoutParams(params);        borderText.setLayoutParams(params);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        CharSequence tt = borderText.getText();        //两个TextView上的文字必须一致        if(tt== null || !tt.equals(this.getText())){            borderText.setText(getText());            this.postInvalidate();        }        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        borderText.measure(widthMeasureSpec, heightMeasureSpec);    }    protected void onLayout (boolean changed, int left, int top, int right, int bottom){        super.onLayout(changed, left, top, right, bottom);        borderText.layout(left, top, right, bottom);    }    @Override    protected void onDraw(Canvas canvas) {        borderText.draw(canvas);        super.onDraw(canvas);    } //设置描边颜色,比如(getResources().getColor(R.color.red))    public void setBianColor(int is){        borderText.setTextColor(is);     }}


在xml中声明:


     <你工程的包名.StrokeTextView
            android:id="@+id/phone_num_txt"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="left|center"
            android:textColor="#ffffff"
            android:textSize="20sp" />



0 0