Canvas方法进一步学习
canvas.save()
save方法是和restore方法成对出现的,save方法用来保存画布的状态,而restore方法用来恢复画布的状态,并将save和restore之间绘制的图像,合并到画布上。
当我们对画布进行旋转,缩放,平移等操作的时候其实我们是想对特定的元素进行操作,比如图片,一个矩形等,但是当你用canvas的方法来进行这些操作的时候,其实是对整个画布进行了操作,那么之后在画布上的元素都会受到影响,所以我们在操作之前调用canvas.save()来保存画布当前的状态,当操作之后取出之前保存过的状态,这样就不会对其他的元素进行影响。
代码段1:
1 | public void draw() { |
代码段2:
1 | public void draw() { |
上面这两个代码片段中我们都假设有两张图片bmp1和bmp2,并且都画在画布上!那么代码段1和代码段2的不同:
代码段1中我们进行画布缩放的之前保存了画布状态,做了缩放操作之后又取出之前保存的状态,这样做是为了保证bmp2正常画出来不受到缩放的影响!代码段2里,画了bmp1后就执行了缩放操作,并且没有保存状态!紧接着画了bmp2,那么bmp2也会一样受到缩放的影响!
canvas.restore()
见canvas.save()方法中的介绍。
canvas.translate()
平移画布,更好的理解是:平移坐标系。原来画布的坐标原点是(0,0),当执行了translate(x,y)之后,之后的操作都是以(x,y)为坐标原点进行操作的。
canvas.roatate()
旋转画布,更好的理解是:旋转坐标系。
通过使用translate()方法和rotate方法可以方便我们进行开发,例子:画表盘。
1 | public class Clock extends View { |
效果图:

canvas.scale()
对画布进行缩放。
Canvas缩放有以下两个方法:
1 | public void scale (float sx, floatsy) ; |
sx,sy分别为画布x轴和y轴的缩放比例,小于1的时候时缩小,大于一的时候是放大,缩放效果是对之后绘制的图形生效,并不会影响缩放之前绘制的图像,关于其使用建议阅读:Android Canvas 缩放(Scale)。
示例代码:
1 | public class CanvasSave extends View { |
效果图:

示例代码:
Clock.java
CanvasSaveScale.java
参考链接:
canvas.save() canvas.restore() 作用
Android中canvas.save()和canvas.restore()的使用
Android Canvas的save(),saveLayer()和restore()浅谈