Canvas坐标系与绘图坐标系

来源:互联网 发布:淘宝介入后买家没退货 编辑:程序博客网 时间:2024/05/20 12:52

Canvas绘图中牵扯到两种坐标系:Canvas坐标系与绘图坐标系。

  • Canvas坐标系 
    Canvas坐标系指的是Canvas本身的坐标系,Canvas坐标系有且只有一个,且是唯一不变的,其坐标原点在View的左上角,从坐标原点向右为x轴的正半轴,从坐标原点向下为y轴的正半轴。

  • 绘图坐标系 
    Canvas的drawXXX方法中传入的各种坐标指的都是绘图坐标系中的坐标,而非Canvas坐标系中的坐标。默认情况下,绘图坐标系与Canvas坐标系完全重合,即初始状况下,绘图坐标系的坐标原点也在View的左上角,从原点向右为x轴正半轴,从原点向下为y轴正半轴。但不同于Canvas坐标系,绘图坐标系并不是一成不变的,可以通过调用Canvas的translate方法平移坐标系,可以通过Canvas的rotate方法旋转坐标系,还可以通过Canvas的scale方法缩放坐标系,而且需要注意的是,translate、rotate、scale的操作都是基于当前绘图坐标系的,而不是基于Canvas坐标系,一旦通过以上方法对坐标系进行了操作之后,当前绘图坐标系就变化了,以后绘图都是基于更新的绘图坐标系了。也就是说,真正对我们绘图有用的是绘图坐标系而非Canvas坐标系。

为了更好的理解绘图坐标系,请看如下的代码:

    //绘制坐标系    private void drawAxis(Canvas canvas){        int canvasWidth = canvas.getWidth();        int canvasHeight = canvas.getHeight();        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeCap(Paint.Cap.ROUND);        paint.setStrokeWidth(6 * density);        //用绿色画x轴,用蓝色画y轴        //第一次绘制坐标轴        paint.setColor(0xff00ff00);//绿色        canvas.drawLine(0, 0, canvasWidth, 0, paint);//绘制x轴        paint.setColor(0xff0000ff);//蓝色        canvas.drawLine(0, 0, 0, canvasHeight, paint);//绘制y轴        //对坐标系平移后,第二次绘制坐标轴        canvas.translate(canvasWidth / 4, canvasWidth /4);//把坐标系向右下角平移        paint.setColor(0xff00ff00);//绿色        canvas.drawLine(0, 0, canvasWidth, 0, paint);//绘制x轴        paint.setColor(0xff0000ff);//蓝色        canvas.drawLine(0, 0, 0, canvasHeight, paint);//绘制y轴        //再次平移坐标系并在此基础上旋转坐标系,第三次绘制坐标轴        canvas.translate(canvasWidth / 4, canvasWidth / 4);//在上次平移的基础上再把坐标系向右下角平移        canvas.rotate(30);//基于当前绘图坐标系的原点旋转坐标系        paint.setColor(0xff00ff00);//绿色        canvas.drawLine(0, 0, canvasWidth, 0, paint);//绘制x轴        paint.setColor(0xff0000ff);//蓝色        canvas.drawLine(0, 0, 0, canvasHeight, paint);//绘制y轴    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

界面如下所示: 
这里写图片描述

第一次绘制绘图坐标系时,绘图坐标系默认情况下和Canvas坐标系重合,所以绘制出的坐标系紧贴View的上侧和左侧; 
第二次首先将坐标轴向右下角平移了一段距离,然后绘制出的坐标系也就整体向右下角平移了; 
第三次再次向右下角平移,并旋转了30度,图上倾斜的坐标系即最后的绘图坐标系