1.2 Canvas

2018-08-16  本文已影响0人  it奔跑在路上

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方法时,每次都会重新绘制,相当于每次绘制图形时,都会先产生一个透明的图层,透明的图层不会对原有的进行覆盖,且一直存在。

上一篇下一篇

猜你喜欢

热点阅读