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
Android源码之Matrix的更多相关文章
- 2014年最新720多套Android源码2.0GB免费一次性打包下载
之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...
- Android源码——Broadcast Receiver
Android源码分析——广播 广播是一种在组件之间进行消息传递的方式.广播机制的实现是基于Binder进程间通信. Binder进程间通信和广播的差别:Binder中,Client组件和Servic ...
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- Eclipse与Android源码中ProGuard工具的使用
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
- Android 源码下载方法(Git 方式clone)
Android源码对于Android开发者来说,迟早有一天你会用到的,所以就记录一下,分享给读者,希望对读者有用 这里需要使用到Git相关知识,不清楚的可以先阅读,了解的可以跳过 Git-Tortoi ...
- Android源码编译make的错误处理
android源码下载:官方下载 或参考android源码下载方式 Android编译版本: PLATFORM_VERSION=4.0.1(最新Android 4.0.1) OS 操作系统平台: Li ...
- Atitit.反编译apk android源码以及防止反编译apk
Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...
- 加速android源码编译
添加缓存环境变量 : 在 ~/.bashrc 环境变量文件中 添加 export USE_CCACHE=1环境变量, 加速随后的编译过程; 分配缓存磁盘大小 为 ccache 指定磁盘中的一部分大小, ...
- 编译Android源码
编译版本要求 基本安装环境 ubuntu 14.04 64 sudo apt-get install git-core gnupg flex bison gperf build-essential \ ...
随机推荐
- yield 关键字和迭代器
一般使用方法 yield 关键字向编译器指示它所在的方法是迭代器块 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返回值,例如,在 forea ...
- mysql - 启动错误InnoDB: mmap(137363456 bytes) failed; errno 12
[zsm]下午mysql出现了问题,很纠结,最后找到了原因,原因是内存不够用: 查看内存显示 [root@AY1305070924544 /]# free -m tota ...
- 关于利用动态代理手写数据库连接池的异常 java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to java.sql.Connection
代码如下: final Connection conn=pool.remove(0); //利用动态代理改造close方法 Connection proxy= (Connection) Proxy.n ...
- java编写一个端口扫描器
好久没写java了,学的时候,也没学习网络编程这一块,无意中看到了一本书,于是小小复习一下java,写个端口扫描器,玩玩吧,网上这种小公具有的是,就是自己无聊写着玩玩. 源代码如下: 共两个类,比较简 ...
- HTML_常见命令学习笔记
1. java类中的这段代码 out.println(" <div class='line'>"); out.println(" <div align= ...
- java新手笔记7 找最小、最大、排序
1.最小数 // 1.0 public class SortDemo1 { public static void main(String[] args) { int[] a = {2,5,4,6,8, ...
- 10.26_地图应用, OSC_doc文档集合,node-webkit
(1)地图:关于电子地图的加载.展示方式,知乎上有篇文章写的很好:http://www.zhihu.com/question/21530085对于地图的导航距离计算呢?原理是什么? (2)node-w ...
- Codevs 1958 刺激
1958 刺激 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description saffah的一个朋友S酷爱滑雪,并且追求刺激(exitement, ...
- MongoDB源码分析——mongo主程序入口分析
Edit 源码版本为MongoDB 2.6分支 mongo主程序入口分析 mongo是MongoDB提供的一个执行JavaScript脚本的客户端工具,可以用来和服务端交互,2.6版本的Mongo ...
- apache的MPM机制-prefork
apache是基于模块化设计的. 关于基础的服务,也采用了模块化的设计,但是这个模块是具有排他性的,同一时间只能有一个得到调用. MPM模块(multi processing module) 多处理模 ...