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

Android源码之Matrix的更多相关文章

  1. 2014年最新720多套Android源码2.0GB免费一次性打包下载

    之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...

  2. Android源码——Broadcast Receiver

    Android源码分析——广播 广播是一种在组件之间进行消息传递的方式.广播机制的实现是基于Binder进程间通信. Binder进程间通信和广播的差别:Binder中,Client组件和Servic ...

  3. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  4. Eclipse与Android源码中ProGuard工具的使用

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

  5. Android 源码下载方法(Git 方式clone)

    Android源码对于Android开发者来说,迟早有一天你会用到的,所以就记录一下,分享给读者,希望对读者有用 这里需要使用到Git相关知识,不清楚的可以先阅读,了解的可以跳过 Git-Tortoi ...

  6. Android源码编译make的错误处理

    android源码下载:官方下载 或参考android源码下载方式 Android编译版本: PLATFORM_VERSION=4.0.1(最新Android 4.0.1) OS 操作系统平台: Li ...

  7. Atitit.反编译apk android源码以及防止反编译apk

    Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool  apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...

  8. 加速android源码编译

    添加缓存环境变量 : 在 ~/.bashrc 环境变量文件中 添加 export USE_CCACHE=1环境变量, 加速随后的编译过程; 分配缓存磁盘大小 为 ccache 指定磁盘中的一部分大小, ...

  9. 编译Android源码

    编译版本要求 基本安装环境 ubuntu 14.04 64 sudo apt-get install git-core gnupg flex bison gperf build-essential \ ...

随机推荐

  1. 通过Web.config中的configSections配置自己系统的全局常量

    通过Web.config中的configSections配置自己系统的全局常量 随着系统的庞大,你的全局信息保存在appsitting里可能会比较乱,不如为模块写个自定义的全局常量吧 首先在Web.C ...

  2. OC加强-day06

    #program mark - 08 NSMutableDictionary的使用 [掌握] "/08 NSMutableDictionary的使用/1_练习 "练习 1.小明的身 ...

  3. javascript DOM操作 第19节

    <html> <head> <title>DOM对象</title> <script type="text/javascript&quo ...

  4. ZOJ 1091 (HDU 1372) Knight Moves(BFS)

    Knight Moves Time Limit: 2 Seconds      Memory Limit: 65536 KB A friend of you is doing research on ...

  5. c++ primer复习(三)

    1 istream.ostream类型,cin.cout.cerr是istream或ostream类型的具体的对象,<<和>>是操纵符 getline函数的参数是istream ...

  6. ubuntu 安装phpmyadmin

    参考文章: http://www.111cn.net/database/mysql/43957.htm    access错误的解决方法 1 首先下载  去官网下载phpmyadmin 2  然后直接 ...

  7. [Computer Vision] SIFT特征学习笔记

    SIFT(Scale Invariant Feature Transform),尺度空间不变特征,目前手工设计的最好vision特征. 以下是学习http://blog.csdn.net/zddblo ...

  8. 关于学习HTML5中自己犯的错误

    7.1写错了 siblings()这个函数写成了sibling,在jQuery中并没有这个函数的定义 在查找错误的过程中,自己也发现了一个学习jQuery的网站http://www.365mini.c ...

  9. yii2源码学习笔记(十九)

    view剩余代码 /** * @return string|boolean the view file currently being rendered. False if no view file ...

  10. Eyeshot Ultimate 学习笔记(4)

    动画 Eyeshot的官方Demo中有一个功能是近期项目需要用到的,就是动画效果.其中主要运用到BlockReference类,该类下的两个方法MoveTo(Dictionary<string, ...