您的位置:首页 > 移动开发 > Android开发

Android源码之Matrix

2016-01-25 19:34 459 查看
Matrix类在Android中主要用来进行矩阵变换,其可操作的对象包括图像、点阵、Vector(向量)、矩形等。

Matrix支持的变换类型主要有以下几种:

1、Translate:平移变换

2、Rotate:旋转变换

3、Scale:缩放变换

4、Skew:错切变换

Matrix的主要接口也是根据这几种变换类型来分的。

一、针对变换类型的接口。针对每一种变换类型,Matrix都提供了三种接口,即

setXXX();

preXXX();

postXXX();

其中:

setXXX()接口用于设置该Matrix。其以前的设置值全被清空,相当于先执行了一次reset(),然后执行setXXX();

preXXX()接口用于矩阵前乘,即M' = M * T(...);

postXXX()接口用于矩阵后乘,即M' = T(...) * M;

如:

public void setScale(float sx, float sy, float px, float py);

public void setScale(float sx, float sy);

public boolean preScale(float sx, float sy, float px, float py);

public boolean preScale(float sx, float sy);

public boolean postScale(float sx, float sy, float px, float py);

public boolean postScale(float sx, float sy);

注:除平移变换外,其余三种变换类型的每个接口都提供了一个重载版本,其中一个是可以指定pivot点,另一个是默认0坐标点。pivot点指中心点,如旋转中心点,缩放中心点,其特点是在变换过程中,其位置保持不变。

二、针对具体对象进行变换的接口

1、对矩形变换

public boolean rectStaysRect(); //判断该矩阵是否能够将一个矩形变换为另一个矩形。只有单位阵,或者只进行过平移、缩放、和N*90度旋转的矩阵才能对矩形进行变换

public boolean setRectToRect(RectF src, RectF dst, ScaleToFit stf); //使用矩形src到dst的平移和缩放值来设置当前矩阵

public boolean mapRect(RectF dst, RectF src); //使用当前矩阵将src映射为dst
public boolean mapRect(RectF rect); //同mapRect(rect, rect);

2、对点序列进行变换

public void mapPoints(float[] dst, int dstIndex, float[] src, int srcIndex, int pointCount);

public void mapPoints(float[] dst, float[] src);

public void mapPoints(float[] pts);

使用当前矩阵将src点序列映射到dst点序列。点序列的格式为x1,y1,x2,y2......

3、对Vector向量进行变换

public void mapVectors(float[] dst, int dstIndex, float[] src, int srcIndex, int vectorCount);
public void mapVectors(float[] dst, float[] src);
public void mapVectors(float[] vecs);

使用当前矩阵对向量进行变换。

三、矩阵操作

public boolean invert(Matrix inverse); //判断当前矩阵是否可转置,如果是则返回true,同时将inverse设置为转置阵
public void getValues(float[] values); //取得当前矩阵的float序列
public void setValues(float[] values); //将float序列值转化为当前矩阵的值。

关于Matrix转置类型的介绍以及Matrix矩阵的格式的介绍请参考:

/content/3299804.html

http://blog.csdn.net/pathuang68/article/details/6991867

测试代码下载:http://download.csdn.net/detail/lxgwm2008/5234463
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: