Canvas的坐标转换

  默认情况下,画布坐标的原点就是绘图区的左上角,向左为负,向右为正,向上为负,向下为正。但是通过Canvas提供的方法可以对坐标进行转换。转换的方式主要有4种:平移、旋转、缩放、拉斜。如下:

//坐标平移,在当前原点的基础上水平移动dx个距离,垂直移动dy个距离,正负符号决定方向。坐标原点改变后,所有的坐标都是以新的原点为参照进行定位;
public void translate(float dx, float dy)

//将画布的坐标以当前原点为中心旋转指定的角度,如果角度为正,则为顺时针旋转,否则为逆时针旋转;
public void rotate(float degrees)

//以点(px,py)为中心对画布坐标进行旋转degress度,角度为正表示顺时针旋转,为负表示逆时针旋转;
public final void rotate(float degrees, float px, float py)

//缩放画布的坐标,sx、sy分别是x方向和y方向的缩放比例,小于1表示缩小,等于1表示不变,大于1表示放大。画布缩放后,绘制在画布上的图形也会等比例缩放。缩放的单位是倍数,比如sx是0.5,就是在x方向上缩小0.5倍;
public void scale(float sx, float sy)

//以(px,py)为中心对画布进行缩放;
public final void scale(float sx, float sy, float px, float py)

//将画布分别在x方向和y方向上拉斜一定的角度,sx为x方向倾斜角度的tan值,sy为y方向倾斜角度的tan值。比如我们打算在x轴方向上倾斜45度,则tan45=1,写成canvas.skew(1,0);
public void skew(float sx, float sy)

  坐标转换后,后面的图形绘制功能将跟随新坐标,转换前已经绘制的图形不会有任何的变化。另外,为了能恢复到坐标变化之前的状态,Canvas定义了两个方法用于保存现场和恢复现场:

//保存现场;
public int save()

//恢复现场到save()执行之前的状态;
public void restore()

  需要注意的是:在一个绘图周期内,调用save()方法保存现场,调用restore()方法恢复现场,这样才不会影响下一次绘图。

  在Android中,还定义了一个名为Matrix的类,该类定义了一个3 * 的矩阵,可以通过Matrix类同样实现坐标的变换。方法如下:

//移位;
public void setTranslate(float dx, float dy)

//旋转;
public void setRotate(float degrees)
public void setRotate(float degrees, float px, float py)

//缩放;
public void setScale(float sx, float sy)
public void setScale(float sx, float sy, float px, float py)

//拉斜;
public void setSkew(float kx, float ky)
public void setSkew(float kx, float ky, float px, float py)

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
---------------------last line for now--------------------