美文网首页
1.2 Canvas

1.2 Canvas

作者: it奔跑在路上 | 来源:发表于2018-08-16 14:47 被阅读0次

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

    相关文章

      网友评论

          本文标题:1.2 Canvas

          本文链接:https://www.haomeiwen.com/subject/yqdnbftx.html