拓展TextView
自定义View可以通过拓展现有控件
原生TextView通过onDraw()方法绘制要显示的文字,那么继承TextView不重写onDraw()方法,则不会修改TextView任何效果
系统源码
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
}
那么我们就可以在super.onDraw(canvas);也就是原生的方法前或者方法后进行自己的逻辑
@Override
public void onDraw(Canvas canvas){
// TODO
super.onDraw(canvas);
// TODO
}
示例
使用到画布状态保存,获取控件的宽高
public class MyTextView extends TextView{
private Paint mPaint1;
private Paint mPaint2;
public MyTextView(Context context) {
super(context);
initView();
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView(){
mPaint1 = new Paint();
mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_light));
mPaint1.setStyle(Paint.Style.FILL);
mPaint2 = new Paint();
mPaint2.setColor(Color.YELLOW);
mPaint2.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint1);
canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mPaint2);
canvas.save();
// 文字x轴平移10像素
canvas.translate(10, 0);
// 父类绘制
super.onDraw(canvas);
canvas.restore();
}
}
浙公网安备 33010602011771号