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()
,在三维旋转之前把绘制内容的中心点移动到原点,即旋转的轴心,然后在三维旋转后再把投影移动回来: