android中对save()和restore()两个方法的理解

android开发中,我对save()和restore()两个方法,一直不是很明白,这几天有点空,仔细研究了这方面相关的知识,略有感悟,记录下来,以便查阅。
我们知道,canvas画布的原点在屏幕的左上角,以向右为X轴的正方向,以向下为y轴的正方向,如下图所示
android中对save()和restore()两个方法的理解
图片是盗取别人博客的,希望不会被认为侵权,底部我会加上参考的博客链接。
我们使用canvas.drawXXX方法默认是以左上角为原点,水平向右为x轴正方向,垂直向下为y轴正方向来绘制的,当我们使用translate和Rotate方法时,这个坐标系就会有所变化,比如我们调用canvas.translate(100, 100);时,那么canvas的坐标系就会变成如下的图所示:
android中对save()和restore()两个方法的理解
这时,canvas的原点就偏移了左上角100*100的距离,这个时候绘制的图形就会以新的坐标系为准,这时如果调用如下代码:

Rect rect1 = new Rect(0,0,400,220);  
canvas.drawRect(rect1, paint);

显示就是上面那个图,各位看官,尽管我们开始的点是0*0,但是距离左上角还是有100*100的距离,这是为什么呢,因为是新的坐标系为准,新的坐标系的原点距离左上角就是100*100的,那么画出的图形也就距离左上角100*100了,这就不奇怪了。
这个时候,大家想下,我又想把坐标原点移到左上角去,怎么办呢,使用canvas.translate(-100, -100)吗,这个当然可以,但是还有更好的办法,即使用save()和restore(),我们在调用会改变canvas坐标系的操作前,调用save(),绘制完成之后调用restore(),就把canvas坐标系恢复到最初的状态。
还有个问题就是,我在save()和restore()之间变换坐标系所绘制的图形,在restore()被调用之后是不变的,因为改变的只是canvas的坐标系,已经绘制在界面上的图形还是保持之前的。

http://blog.csdn.net/harvic880925/article/details/39080931
https://www.zybuluo.com/coder-pig/note/214196

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值