Android源码之Matrix

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矩阵的格式的介绍请参考:

http://zensheno.blog.51cto.com/2712776/513652

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


测试代码下载:http://download.csdn.net/detail/lxgwm2008/5234463


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值