Canvas,Matrix的变换顺序

Posted krislight1105

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Canvas,Matrix的变换顺序相关的知识,希望对你有一定的参考价值。

Canvas的几何变换是倒序的,Matrix是正序。

比如先平移在旋转:

canvas.rotate();

canvas.translate();

//translate先执行,rotate后执行

 

Matrix里面就好比维护者一个双端队列,当调用preXxx方法时,将该方法放入队列的顶端,(即每来一个preXxx方法就按照代码的书写顺序依次放入队列的顶端)

当调用setXxx方法时,清空当前队列,(如此说来,在setXxx之前调用的preXxx,postXxx都是无效的)

当调用postXxx方法时,将方法放入队列的末端,(即每来一个postXxx方法就按照代码的书写顺序依次放入队列的顶端)

 因此大家一般使用时的代码是:先调用setXxx,再调用 preXxx,postXxx,(这里preXxx方法与postXxx的代码书写的先后顺序无所谓,但是setXxx必须是在两个方法之前调用)

 

camera是三维变换

如果camera旋转需要图形左右对称,需要配合上 Canvas.translate(),在三维旋转之前把绘制内容的中心点移动到原点,即旋转的轴心,然后在三维旋转后再把投影移动回来:

以上是关于Canvas,Matrix的变换顺序的主要内容,如果未能解决你的问题,请参考以下文章

Canvas中的scale与translate详解

Android Matrix图像变换处理

Android 中的 Matrix

Matrix

Android 高级UI解密 :PathMeasure截取片段 与 切线(新思路实现轨迹变换)

Android 高级UI解密 :PathMeasure截取片段 与 切线(新思路实现轨迹变换)