aide安卓编程10-坐标系的旋转平移缩放

画图部分代码改为:

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);//画字
代码

效果

可以看到最终画出的字是没有旋转过的。这是因为使用的是旋转之前保存的坐标系。

你可能感兴趣的:(aide安卓编程10-坐标系的旋转平移缩放)