canvas的save,restore方法

save方法是把canvas当前的坐标系特征数据保存在一个stack中的方法,restore方法是从这个stack中移除顶层的数据的方法。那这个坐标系特征数据指的是哪些数据呢?看看save方法的google官方解释
/**
* Saves the current matrix and clip onto a private stack. Subsequent
* calls to translate,scale,rotate,skew,concat or clipRect,clipPath
* will all operate as usual, but when the balancing call to restore()
* is made, those calls will be forgotten, and the settings that existed
* before the save() will be reinstated.
*
* @return The value to pass to restoreToCount() to balance this save()
*/
这个方法解释中详细说明了保存的数据,
translate,scale,rotate,skew,concat or clipRect,clipPath
移动,缩放,旋转,倾斜,串联或者偏移之类的数据,这个数据时被放在一个私有化的stack中,当调用restore方法后,对这些对象的操作就会移除,调用一次restore方法,canvas坐标系特征这是还原到上一次调用save方法时保存的数据。比如说,你对canvas对象做了一次90度旋转,然后调用了save方法,然后又把canvas对象放大为2倍,又掉用了save方法,那么你在调用restore方法,那么canvas的坐标系特征就是被转了90度的样子,如果再调用一次resotore方法,那么canvas就在初始化时的位置了。
注意点:
1,save和resotre只是控制坐标系特征的,restore只会把坐标系特征还原,不会清除save之后绘制的元素。
2,对canvas做旋转缩放之类的操作,不会对坐标系本身产生影响,坐标原点还是在view的左上角。
3,不管做了多少次旋转,缩放之类的操作,就算你save了N多次之后都没有调用restore方法,canvas最终绘制在view上坐标系数据都是要还原到初始状态的,比如说,你没有做任何save之前,在canvas上绘制了一个向上的箭头,然后把canvas顺时针旋转90度,那么箭头此时应该是向右的,然后你调用save方法,onDraw方法到此为止。view显示在屏幕上你会发现箭头还是向上的!不管你在onDraw中旋转了多少次,save的多少次,最终显示的图像箭头就是向上的。
4,restore的方法解释下:
/**
* This call balances a previous call to save(), and is used to remove all
* modifications to the matrix/clip state since the last save call. It is
* an error to call restore() more times than save() was called.
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值