画图部分代码改为:
Paint p=new Paint();
p.setTextSize(100);//设置字大小
p.setColor(Color.rgb(255,100,100));//画笔为深粉红色
canvas.drawText("早安!",400,100,p);//画字
canvas.rotate(10);//转坐标系(顺时针转10度)
canvas.drawText("午安!",400,100,p);//画字
canvas.translate(0,100);//平移坐标系(向下100)
canvas.drawText("晚安!",400,100,p);//画字
canvas.scale(2,1);//缩放坐标系(x方向变为原来2倍,y方向不变)
canvas.drawText("午安!",400,100,p);//画字
这段代码使用了3种坐标变换(旋转,平移,缩放),在新的坐标系中画图。利用这些变换可以画出有角度的字以及各种奇妙的组合图形,对界面绘制很有用。
其中旋转rotate和缩放scale操作还可以多几个参数来指定参考点,例如:
canvas.rotate(10,20,35);//以(20,35)为不动点,顺时针转10度`
canvas.scale(-1,2,3,4);//以(3,4)为中心,横向翻转,纵向放大一倍
注意一旦对画图坐标系改动,之后的绘图代码都按照最新的坐标系执行绘制。
有时我们在改变坐标系前要保存当前坐标系,以便把坐标系复原。这时使用matrix(矩阵/坐标系)来保存。下面给一个例子:
Paint p=new Paint();
p.setTextSize(100);//设置字大小
p.setColor(Color.rgb(255,100,100));//画笔为深粉红色
Matrix m=canvas.getMatrix();//保存当前坐标系到新建坐标系m
canvas.rotate(10);//转坐标系(顺时针转10)
canvas.setMatrix(m);//把当前坐标系改为保存的坐标系m
canvas.drawText("早安!",400,100,p);//画字
可以看到最终画出的字是没有旋转过的。这是因为使用的是旋转之前保存的坐标系。