1、Matrix简介
- Matrix是一个矩阵,主要功能映射视图中的坐标,这里的映射有两重意思,一是将坐标以矩阵的形式表示,类似于数学中的向量,二是映射手机屏幕坐标和安卓坐标的对应关系,在物理屏幕中坐标原点为左上角(0,0)处,而在Android了开发中使用的坐标是去除状态栏和导航栏的高度,即(0,0)位置在状态栏之下,假设状态栏30px,导航栏60px,则Android中的(0,0)对应物理坐标(0,90)
- 矩阵除了映射坐标外还存在另一个作用,数学中都学过矩阵的变换,通过矩阵变换实现向量的修改,同样思想如果把整个变换作用于某个图形的所有像素,则可以实现图形的变换,这就是Matrix的另一个功能,实际他一直在默默的做事情
2、Matrix的矩阵形式
- 矩阵公式:View的属性及其改变都可以映射其中
- MSCALE_X、MSACALE_Y:代表View的X、Y坐标的缩放系数;
- MTRANS_X、MTRANS_Y:代表View的X、Y的方向的位移量;
- MSKEW_X、MSKEW_Y:代表View的X、Y的方向的位侧错切;
- MSCALE_X、MSACALE_Y、MSKEW_X、MSKEW_Y:共同决定View的旋转;
- MPERSP用于控制透视,通常为(0,0,1)
View的改变和动画执行的背后都是在做Matrix的计算,通过一定规则改变Matrix矩阵的值,将改变后的数据反应在视图上就行成了View的展示,所以在自定义View的过程中可以将很多关于坐标和动画的过程用Matrix实现,不过安卓提供了很多方法简化了功能,将Matrix推至幕后工作。
- 矩阵计算规则
- 矩阵乘法不满足交换律,即 A*B ≠ B*A
- 矩阵乘法满足结合律,即 (A*B)*C = A*(B*C)
- 矩阵与单位矩阵相乘结果不变,即 A * I = A
3、使用Matrix实现View动画
- 缩放
缩放反应在坐标上的效果就是每个像素的坐标(x,y)按照一定规则变大或缩小即形成缩放效果,每个点的计算公式为:
x = k1 * x0
Y = k2 * y0
根据变换公示就是将坐标(x、y、z)分别乘以缩放系数,如果按照上面的矩阵MSCALE_X、MSACALE_Y表示缩放,将乘积关系使用矩阵表示为原坐标矩阵 X 缩放矩阵,其实这里的就是数学中的矩阵知识,看到最后的结果即可退到出所乘的矩阵
- 位移
位移在坐标上的体现就是在同方向上所有的点的坐标同时加上或减少相同的数据,实现试图的整体平移,公式中都只是在基础上加上移动的参数,由MTRANS_X、MTRANS_Y控制,矩阵乘积如下:
- 旋转
旋转相对意位移和缩放来说复杂一点,但也是有章可循,试想一下如果个你一个直线或一个点,旋转一定角度后计算此时的坐标位置,相信所有人都会想到利用正弦和余弦函数,以旋转不变的长度为半径即可算出(x,y),这也是Matrix控制旋转的原理,公式如下:
上面的过程就是公示变换,公式忘记的可以自行百度,公式转换的矩阵: