实现方法是两个TextView叠加,只有描边的TextView为底,实体TextView叠加在上面
public class MyTextView2 extends TextView { private TextView borderText = null;///用于描边的TextView public MyTextView2(Context context) { super(context); borderText = new TextView(context); init(); } public MyTextView2(Context context, AttributeSet attrs) { super(context, attrs); borderText = new TextView(context, attrs); init(); } public MyTextView2(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); borderText = new TextView(context, attrs, defStyleAttr); init(); } public void init() { TextPaint tp1 = borderText.getPaint(); tp1.setStrokeWidth(1); //设置描边宽度 tp1.setStyle(Paint.Style.STROKE); //对文字只描边 borderText.setTextColor(Color.GREEN); //设置描边颜色 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); } }