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 \ ...
随机推荐
- java经验总结二:ORA-08103: 对象不再存在
问题发生的环境: 在springMvc+mybatis框架中,调用oracle的存储过程时,碰到的一个这样的异常: org.springframework.jdbc.UncategorizedSQLE ...
- job还是job
declare jobno binary_integer;rm_days number;rm_hour number; --传入的hourmy_hour number; --取出当前时间的ho ...
- iOS的Mantle实战分析
公司项目之前的model层代码是我使用JSON工具直接生成Objective-C代码的,当时还是觉得相当省事的,毕竟我经历过无model层的NSDictionary“黑暗”时期.但是随着项目的推进,问 ...
- C#冒泡排序法程序代码
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...
- frame 第三节
1.准备3个文件 main.html: <html> <head> <title>框架</title> </head> <frames ...
- [USACO1.2.2]方块转换 Transformations
P1205 [USACO1.2]方块转换 Transformations 标签 搜索/枚举 USACO 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方 ...
- 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别
之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...
- Asp.net Mvc HTTP 404。
asp.net mvc 设置完起始页的时候会出现以下Error 此错误的原因是在MVC中设置完起始页 会改变 的 值 从而使服务器找不到 相对应的路径 解决方案: 通过 路由设置,解决web ...
- absolute之实现居中的三种方式
居中思想可以由很多方式实现,这篇文章采用absolute实现:由传统方式开始到absolute独立使用方式 方式一:传统方式,父容器relateive,子元素absolute,然后left:50%,再 ...
- HTML 表格的书写方式:
首先要进行reset table{border-collapse:collapse;border-spacing:0;}th{text-align:inherit;} 1. caption标签对整个 ...