Matrix的中文是矩阵的意思,在Android中它起着坐标映射、变换的功能。意思就是说我们在自定义view中,有时需要对图表进行缩放、旋转、转移、错切等操作,就需要对图表的坐标进行一定的转换,此时就是Matrix在后台起作用的。Matrix是一个3x3的矩阵,大概长成下面那样子,如图:
举个例子,为什么要用Matrix进行坐标转换,比如我想对点A围绕原点旋转30°,此时通过Matrix就可以很容易的实现这一需求,操作如下
Matrix matrix=new Matrix();
matrix.postRotate(30);
其实这个旋转操作本质上是点A在旋转前后的坐标值发生了改变而已,但是如果旋转后的坐标值要我们自己去计算的话就非常麻烦,而直接调用matrix的postRotate方法,matrix就已经帮我们算好了。至于它里面是怎么计算的,下面会讲到,这里只是想说明Matrix的作用,就是对坐标通过映射转换成我们需要的坐标值
Matrix的基本变换有四种:translate(平移)、scale(缩放)、rotate(旋转)、skew(错切)。下面来看看这个几种变换分别对应Matrix矩阵的哪些位置
由上面两个图表,可以清楚地看到Matrix是一个3×3矩阵,每个参数代表的一定的意义,我们着重关注旋转、位移、缩放、错切这几个参数即可。下面就逐一分析一下这几种矩阵变换内部是如何实现的
1.缩放(scale)
比如对一个图表在x和y轴分别缩放k1和k2倍
用Matrix实现如下
//首先构建一个单位矩阵
Matrix matrix=new Matrix();
matrix.setScale(k1,k2);
但从Matrix的内部原理来分析,它的计算公式如下
x=x0 * k1、y=y0 * k2
其中(x0、y0)代表变换前的坐标,(x、y)代表变换后的坐标
等价于矩阵的如下表示: