Android自定义系列——12.Matri详解

方法类别相关API摘要
基本方法
比较、 获取哈希值、 转换为字符串
数值操作
set reset
设置、 重置、 设置数值、 获取数值
数值计算
计算变换后的数值
设置(set)
设置变换
前乘(pre)
前乘变换
后乘(post)
后乘变换
特殊方法
一些特殊操作
矩阵相关
(API21)
求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 …
方法详解 构造方法
构造方法
Matrix ()
创建一个全新的,使用格式如下:
Matrix matrix = new Matrix();
通过这种方式创建出来的并不是一个数值全部为空的矩阵,而是一个单位矩阵,如下:
有参构造
Matrix (Matrix src)
这种方法则需要一个已经存在的矩阵作为参数,使用格式如下:
Matrix matrix = new Matrix(src);
创建一个,并对src深拷贝(理解为新的和src是两个对象,但内部数值相同即可) 。
基本方法
基本方法内容比较简单,在此处简要介绍一下 。
1.
比较两个的数值是否相同 。
2.
获取的哈希值 。
3.
将转换为字符串: {[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}
4.‘
将Matrix转换为短字符串: [1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]
数值操作
数值操作这一组方法可以帮助我们直接控制里面的数值 。
1.set
void set (Matrix src)
没有返回值,有一个参数,作用是将参数的数值复制到当前中 。如果参数为空,则重置当前,相当于reset() 。
2.reset
void reset ()
重置当前(将当前重置为单位矩阵) 。
3.
void setValues (float[] values)
的参数是浮点型的一维数组,长度需要大于9,拷贝数组中的前9位数值赋值给当前 。
4.
void getValues (float[] values)
很显然,和是一对方法,参数也是浮点型的一维数组,长度需要大于9,将中的数值拷贝进参数的前9位中 。
数值计算
1.
void mapPoints (float[] pts)void mapPoints (float[] dst, float[] src)void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCount)
计算一组点基于当前变换后的位置,(由于是计算点,所以参数中的float数组长度一般都是偶数的,若为奇数,则最后一个数值不参与计算) 。
它有三个重载方法:
(1) void(float[] pts) 方法仅有一个参数,pts数组作为参数传递原始数值,计算结果仍存放在pts中 。
示例:
// 初始数据为三个点 (0, 0) (80, 100) (400, 300) float[] pts = new float[]{0, 0, 80, 100, 400, 300};// 构造一个matrix,x坐标缩放0.5Matrix matrix = new Matrix();matrix.setScale(0.5f, 1f);// 输出pts计算之前数据Log.i(TAG, "before: "+ Arrays.toString(pts));// 调用map方法计算matrix.mapPoints(pts);// 输出pts计算之后数据Log.i(TAG, "after : "+ Arrays.toString(pts));
结果:
before: [0.0, 0.0, 80.0, 100.0, 400.0, 300.0]after : [0.0, 0.0, 40.0, 100.0, 200.0, 300.0]
(2) void(float[] dst, float[] src) ,src作为参数传递原始数值,计算结果存放在dst中,src不变 。
示例:
// 初始数据为三个点 (0, 0) (80, 100) (400, 300)float[] src = http://www.kingceram.com/post/new float[]{0, 0, 80, 100, 400, 300};float[] dst = new float[6];// 构造一个matrix,x坐标缩放0.5Matrix matrix = new Matrix();matrix.setScale(0.5f, 1f);// 输出计算之前数据Log.i(TAG,"before: src="http://www.kingceram.com/post/+ Arrays.toString(src));Log.i(TAG,"before: dst="+ Arrays.toString(dst));// 调用map方法计算matrix.mapPoints(dst,src);// 输出计算之后数据Log.i(TAG, "after : src="http://www.kingceram.com/post/+ Arrays.toString(src));Log.i(TAG,"after : dst="+ Arrays.toString(dst));