标签:
当我们自定义的view继承TextView的后,若不重写onDraw()方法,则不会修改TextView的任何效果。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
程序调用的是super.onDraw(canvas);方法来实现原生控件的功能,但我我们可以在调用super.onDraw(canvas)之前和之后实现自己的逻辑,即在系统绘制文字的前后完成操作。
// 创建画笔
private Paint paint1;
private Paint paint2;
private Paint paint3;
private Paint paint4;
public MyTextView(Context context) {
this(context, null);
}
public MyTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// 初始化工作(创建画笔)
paint1 = new Paint();
paint1.setColor(getResources().getColor(android.R.color.holo_blue_light));
paint1.setStyle(Paint.Style.FILL);
paint2 = new Paint();
paint2.setColor(Color.YELLOW);
paint2.setStyle(Paint.Style.FILL);
paint3 = new Paint();
paint3.setColor(Color.GREEN);
paint3.setStyle(Paint.Style.FILL);
paint4 = new Paint();
paint4.setColor(Color.GRAY);
paint4.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
// 绘制文本前的的逻辑
/**
* 绘制外层矩形
* getMeasuredWidth():对View上的内容进行测量后得到的View内容占据的宽度
* getMeasuredHeight():对View上的内容进行测量后得到的View内容占据的高度
*/
canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),paint1);
// 第二层矩形
canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, paint2);
// 第三层矩形
canvas.drawRect(20, 20, getMeasuredWidth() - 20, getMeasuredHeight() - 20, paint3);
// 第四层矩形
canvas.drawRect(30, 30, getMeasuredWidth() - 30, getMeasuredHeight() - 30, paint4);
// save:用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作
canvas.save();
// 绘制文字前平移(100px,30px)。
canvas.translate(100, 30);
// 父类绘制文本
super.onDraw(canvas);
// 绘制文本之后的逻辑
// restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响,
// 也就是防止translate对后来的绘制有影响。
canvas.restore();
}
效果图如下:
标签:
原文地址:http://blog.csdn.net/qq_24304811/article/details/51357441