Matrix的set,pre,post调用顺序

Matrix主要用于对平面进行平移(Translate),缩放(Scale),旋转(Rotate)以及斜切(Skew)操作。
为简化矩阵变换,Android封装了一系列方法来进行矩阵变换;其中包括:

1.set系列方法:setTranslate,setScale,setRotate,setSkew;设置,会覆盖之前的参数。

2.pre系列方法:preTranslate,preScale,preRotate,preSkew;矩阵先乘,如M’ = M * T(dx, dy)。

3.post系列方法:postTranslate,postScale,postRotate,postSkew;矩阵后乘,如M’ = T(dx, dy) * M。

顺序

Matrix里面就好比维护者一个双端队列
当调用preXxx方法时,将该方法放入队列的顶端,(即每来一个preXxx方法就按照代码的书写顺序依次放入队列的顶端)
当调用setXxx方法时,清空当前队列,(如此说来,在setXxx之前调用的preXxx,postXxx都是无效的)
当调用postXxx方法时,将方法放入队列的末端,(即每来一个postXxx方法就按照代码的书写顺序依次放入队列的顶端)

例子分析

例一:

Matrix m = new Matrix(); 
m.setRotate(30);                 - 被覆盖不执行
m.setTranslate(10, 10);          -(1)

只有m.setTranslate(10, 10)有效,因为m.setRotate(30);被清除.

例子二:

Matrix m = new Matrix(); 
m.setTranslate(10, 10);         -(1)
m.postRotate(30);               -(2)

先执行m.setTranslate(10, 10);后执行m.postRotate(30);

例子三:

Matrix m = new Matrix(); 
m.setTranslate(10, 0);     -(2)
m.preRotate(30);           -(1)

先执行m.preRotate(30);后执行;m.setTranslate(10, 10)

例子四:

Matrix m = new Matrix(); 
m.preScale(2f,2f);                         -(2)
m.preTranslate(50f, 20f);                  -(1)
m.postScale(0.2f, 0.5f);                   -(3) 
m.postTranslate(20f, 20f);                 -(4

执行顺序 :m.preTranslate(50f, 20f)–>m.preScale(2f,2f)–>m.postScale(0.2f, 0.5f)–>m.postTranslate(20f, 20f)
注意:m.preTranslate(50f, 20f)比m.preScale(2f,2f)先执行,因为它查到了队列的最前端.

例子五:

Matrix m = new Matrix(); 
m.postTranslate(20, 20); 
m.preScale(0.2f, 0.5f);        
m.setScale(0.8f, 0.8f);          -(2)清空了上面的所有操作
m.postScale(3f, 3f);             -(3)
m.preTranslate(0.5f, 0.5f);      -(1

执行顺序:m.preTranslate(0.5f, 0.5f)–>m.setScale(0.8f, 0.8f)–>m.postScale(3f, 3f)
注意:m.setScale(0.8f, 0.8f)清除了前面的m.postTranslate(20, 20)和m.preScale(0.2f, 0.5f);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值