美文网首页
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