您的位置:首页 > 移动开发 > Android开发

重写TextView给文字描边

2015-06-24 11:23 441 查看
给文字描边的一个简单实现原理就是先写一个大的文字,再写一个小的文字贴在大的上面就可以实现文字描边的原理,下面就是重写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" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 布局 textview