Android 笔记 canvas.save()

来源:互联网 发布:域名抵押贷款骗局 编辑:程序博客网 时间:2024/05/23 14:53

canvas.save()/ restore()

在自定义view并且重写onDraw的时候,经常会用到canvas的坐标变换类的方法

比如canvas.rotate,canvas.tranlate,scale,或者直接使用matrix的concat(Matrix m)等等。

但是有一点要记得,那就是这些变换的方法是作用于整个canvas的,而不是单独某一个图像。
相当于是用普通的坐标在canvas上绘图,然后把整个canvas来变换,所以,所有上面的图像都会变换。

而为了给每次绘图都使用不同的变换,就有了canvas.save()和对应的canvas.restore()

每次调用save(),系统都会把坐标状态存入堆栈中,
而每次调用restore(),都会把栈顶的状态弹出来应用到当前的坐标系统。

也就是说,这个系统使用的是堆栈系统,所以可以多次调用save(),然后多次调用restore()

应用场景

一个典型的应用场景就是,希望每次变换坐标以后只应用到想要的图形中。

例如,我在5个区域希望绘制5个图形,所以,每次绘制一个以后就对当前的canvas应用一个坐标变换,将当前绘制的图形移动到目标位置。但是因为这种变换是对应整个坐标canvas的,所以之后的绘图也会变换到那个位置。如果需要在不同位置绘图,就只能不应用坐标变换,而是改变绘图的坐标。

如果使用了save和restore,就可以依然使用坐标还换,每次绘图的坐标还是相同的坐标。
在绘图之前,调用canvas.save(),这样,系统会把之前的状态保存起来。
绘图……
绘图结束以后,图像出现在目标位置。
为了开始下一次绘图,先调用canvas.restore()。这样,系统坐标会恢复上一次调用save()之前的状态。

0 0
原创粉丝点击