Matrix望文生义便是大学的线性代数中的矩阵,关于矩阵的基本知识和加减乘除运算这儿不再赘述。
Android中的Matrix类是一个比较简单的3×3的3阶矩阵,结构如下:
float matrix = {MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y,
MPERSP_0, MPERSP_1, MPERSP_2 };
结构如上:其间 MSCALE_X和MSCALE_Y别离是操控X轴和Y轴方向的缩放,MSKEW_X和MSKEW_Y是别离操控X坐标和Y坐标的线性歪斜系数,MTRANS_X和MTRANS_Y则是操控X方向和Y方向的线性平移。MPERSP_0、MPERSP_1和MPERSP_2暂时运用不多,今后弥补阐明。
有了上诉描绘了,所谓的矩阵改换首要便是针对这个3阶矩阵进行算术运算了!如平移操作从(0,0)平移到(10,120)则直接将上述矩阵的MSCALE_X=10和MSCALE_Y=120即可Matrix.setValues(matrix数组)。这样Canvas就可以运用该矩阵进行绘图操作,完成平移。
其间旋转矩阵比较特别的,其结构如下:
float matrix = {cosA, -sinA, 0, sinA, cosA, 0,
0, 0, 1 }; 其间A为旋转的视点,如需旋转操作只需将视点传入上述矩阵即可。
一起咱们知道矩阵的乘法是不对称的,即A*B !=B*A,这样的话就涉及到矩阵乘法中的左乘和右乘了,相同Android中Matrix中也完成了左乘和右乘的函数,一切postXXX均为左乘运算,一切preXXX均为右乘运算。这点在咱们运用Matrix进行组合改换时需求留意的问题。
一起因为矩阵目标最终的状况是进过一切改换后运算取得的矩阵,一切假如你需求从头运用该矩阵又不想保存之前的状况时,需求调用reset()重置矩阵的状况,避免产生过错。一起需求留意的是Matrix类的setXXX办法都会默许调用reset()进行矩阵的重置,所以在完成组合改换时一点要留意不要在改换的中心调用setXXX办法,这样setXXX办法之前的改换都被忽略了。