android 文字描边

来源:互联网 发布:拆弹部队知乎 编辑:程序博客网 时间:2024/05/21 14:06
package com.weipeng.textviewcolor;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.text.TextPaint;import android.util.AttributeSet;import android.view.ViewGroup;import android.widget.TextView;/** * Created by Administrator on 2016/3/31. *//* * StrokeTextView的目标是给文字描边 * 实现方法是两个TextView叠加,只有描边的TextView为底,实体TextView叠加在上面 * 看上去文字就有个不同颜色的边框了 */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(10);                                  //设置描边宽度        tp1.setStyle(Paint.Style.STROKE);                             //对文字只描边        borderText.setTextColor(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);    }}
0 0
原创粉丝点击