Android graphics学习笔记(5) - Matrix

public class Matrix extends Object

Matrix类主要用来进行图形的矩阵变换

在学习Matrix之前,先复习下几个公式:
1. 矩阵乘法:
[a11, a12, a13   * [b11, b12]     ……
a21, a22, a23]  


2. 两角和差公式
sin(α+β)=sin α×cosβ+sinβ×cos α
sin(α-β)=sin α×cosβ-sinβ×cos α
cos(x+y)=cosxcosy-sinxsiny
cos(x-y)=cosxcosy+sinxsiny


Matrix定义了一个3×3的矩阵用于进行图形变换.
参数有:
int MPERSP_0
int MPERSP_1
int MPERSP_2
int MSCALE_X
int MSCALE_Y
int MSKEW_X
int MSKEW_Y
int MTRANS_X
int MTRANS_Y
包括SCALE(缩放), SKEW(歪斜), TRANS(平移), PERSP(好像定义的是3D方面的转动角度)
同时Matrix定义了一系列的set,pre,post方法来设定变换的参数:
同时,这几种方法是有不同的意义的:
set方法执行后,之前设置的参数都会被清除.变为默认值.
pre方法会在set、post和前面的pre方法之前调用.
post则是最正常的,依次调用.
比如:
matrix = new Matrix();
matrix.setRotate(10.0f);            //step ①
matrix.postScale(0.5f, 0.5f);      //step ②
matrix.postTranslate(0, 100.0f);   //step ③
matrix.preRotate(30.0f);            //step ④
matrix.preTranslate(300.0f, 0);    //step ⑤
canvas.drawBitmap(bitmap, matrix, mPaint);
调用顺序是⑤④①②③
这里值得一提的是,这种调用顺序变化的实现方式是通过矩阵的前乘和后乘实现的。


具体的方法有:
setRotate(),setScale(),setSinCos(),setSkew(),setTranslate(),
Matrix还提供了一个方法:setValues(float[] values).
这个方法该怎么传递变换参数呢:
这里,values就是包含上述9个参数的一个3维数组,也可以称为3阶矩阵.正是这个3阶矩阵和原矩阵相乘,从而得到新的变换矩阵.


更多参考见API:

http://developer.android.com/reference/android/graphics/Matrix.html

你可能感兴趣的:(Android graphics学习笔记(5) - Matrix)