1.2.1 画布的平移
先按照正常的逻辑画图,和上篇文章类似。
可以参照1.1绘图基础-基本图形绘制
public class MyView extends View {
Paint paint = new Paint();
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setAntiAlias(true);
paint.setColor(Color.parseColor("#ff0000"));//设置画笔的颜色
paint.setStrokeWidth(5);//设置画笔的宽度
paint.setStyle(Paint.Style.FILL);//设置画笔的填充样式
canvas.drawRect(0,0,200,100,paint);
}
}
图1
将画布平移(50,50)像素,在坐标系中,X轴向右为正,Y轴向下为正。
public class MyView extends View {
Paint paint = new Paint();
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setAntiAlias(true);
paint.setColor(Color.parseColor("#ff0000"));//设置画笔的颜色
paint.setStrokeWidth(5);//设置画笔的宽度
paint.setStyle(Paint.Style.FILL);//设置画笔的填充样式
canvas.translate(50, 50);
canvas.drawRect(0,0,200,100,paint);
}
}
图2
可以发现,图片向右下平移了(50,50)的像素。由此可见,坐标系的位置会随着Canvas左上角的点的移动而移动。
1.2.2 canvas介绍
public class MyView extends View {
Paint paint = new Paint();
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setAntiAlias(true);
paint.setColor(Color.parseColor("#ff0000"));//设置画笔的颜色
paint.setStrokeWidth(5);//设置画笔的宽度
paint.setStyle(Paint.Style.FILL);//设置画笔的填充样式
canvas.drawRect(0,0,200,100,paint);
canvas.translate(50, 50);
paint.setColor(Color.parseColor("#00ff00"));//设置画笔的颜色
canvas.drawRect(0,0,200,100,paint);
}
}
图3
可以发现,Canvas在调用drawRect方法时,每次都会重新绘制,相当于每次绘制图形时,都会先产生一个透明的图层,透明的图层不会对原有的进行覆盖,且一直存在。
网友评论