Matrix的preXxx,setXxx,postXxx方法执行顺序的区分

Matrix的preXxx,setXxx,postXxx方法执行顺序的区分



大家在android开发时,免不了用到Matrix这个类,其实就是一个操作矩阵的类。

其中包括pre系列方法:preScale,preTranslate,preRotate,preSkew,set系列方法:setScale,setTranslate,setRotate,setSkew,post系列方法:postScale,postTranslate,postRotate,postSkew,注意这些变换的原点都是(0,,0),就是左上角,(而我们一般希望的是以中心点为原点,这就需要一些setXxx,preXxx,postXxx组合操作)

调用里面的方法preXxx,setXxx,postXxx时有时会发生混淆,分不清哪个会先执行,而且调用的顺序不对时,有时不会执行。下面来区分一下。


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

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

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


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

其实,大家如果了解线性代数的话,preXxx就相当于左乘的矩阵,postXxxx就相当于右乘的矩阵。setXxx就相当于中间的源矩阵


举个例子:A*B*C,

代码: setXxx(x,y);               |     这里的B:设置Matrix矩阵的值,

preXxx(x,y);           |    这里的A:左乘矩阵

               postXxx(x,y);             |    这里的C:右乘矩阵


从矩阵的理论来讲,先计算B左乘A(即A*B),然后再将计算结果右乘C(即(A*B)*C)与先计算B右乘C(即B*C),然后再将计算结果左乘A(即A*(B*C))的结果是一样的。

从代码角度讲,先设置setXxx,然后不管先,再调用postXxx(右乘)效果为(A*B)*C,还是先调用postXxx(右乘),再调用preXxx(左乘),效果为A*(B*C),结果都是一样的。

(意思是说在setXxx之后,然后preXxx,postXxx的调用顺序是无关紧要的,)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值