您的位置:首页 > 其它

canvas的save,restore方法

2017-07-18 17:01 330 查看
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.
 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: