美文网首页
Android画布Canvas--save方法和saveLaye

Android画布Canvas--save方法和saveLaye

作者: aruba | 来源:发表于2020-01-13 17:28 被阅读0次

Canvas里面牵扯两种坐标系:Canvas自己的坐标系、绘图坐标系,当Canvas画布被创建时,Canvas的坐标系就被创建了,并且此坐标系是固定不变的,就是(0,0)到Canvas的宽高,而我们使用Canvas的平移,旋转等方法时实际上操作的是绘图坐标系

  • Canvas的坐标系
    它就在View的左上角,做坐标原点往右是X轴正半轴,往下是Y轴的正半轴,有且只有一个,唯一不变

  • 绘图坐标系
    它不是唯一不变的,它与Canvas的Matrix有关系,当Matrix发生改变的时候,绘图坐标系对应的进行改变,同时这个过程是不可逆的(save和restore方法来保存和还原变化操作),Matrix又是通过我们设置translate、rotate、scale、skew来进行改变的

由于绘图坐标系中Matrix的改变是不可逆的,所以产生了状态栈和Layer栈,它们分别运用于save方法和saveLayer方法,使得绘图坐标系恢复到保存时的状态
  • 状态栈
    save、 restore方法来保存和还原变换操作Matrix以及Clip剪裁
    也可以通过restoretoCount直接还原到对应栈的保存状态

  • Layer栈
    saveLayer的时候都会新建一个透明的图层(离屏Bitmap-离屏缓冲),并且会将saveLayer之前的一些Canvas操作延续过来
    后续的绘图操作都在新建的layer上面进行
    当我们调用restore 或者 restoreToCount 时 更新到对应的图层和画布上

正因为save方法不会创建图层,所以当我们使用Xfermode,ColorFilter,Alpha时应当使用saveLayer(刮刮卡效果)

相关文章

网友评论

      本文标题:Android画布Canvas--save方法和saveLaye

      本文链接:https://www.haomeiwen.com/subject/enlnactx.html