Matrix使用心得

951 阅读1分钟

类说明

本质是一个大小为9的float数组,同时包含了对数组的矩阵操作方法(所有方法最终都调用底层C实现)

values.png

构造说明

默认构造(scaleX、scaleY、persp2为1.0,其他为0)

val m = Matrix()

复制构造(深拷贝)

val m = Matrix(oldMatrix)

方法说明

set(所有set相关的方法都会重置matrix数组,所以多次调用只有最后一次生效)

matrix.setTranslate(xt,yt)//平移值(xt:x轴平移量,yt:y轴平移量)
matrix.setScale(xs,ys)//缩放值(xs:x轴缩放比例,ys:y轴缩放比例)
matrix.setScale(xs,ys,cx,cy)//缩放值(xs,ys同上,cx:x轴缩放中心点,cy:y轴缩放中心点)
matrix.setValues(values)//所有值(values:float数组,适用平移值和缩放值等都有的情况)

post(后乘矩阵:newM*M)

平移
matrix.postTranslate(dx,dy)

postTranslate.png

缩放
matrix.postScale(sx,sy)

postScale.png

中心点缩放
matrix.postScale(sx,sy,px,py)//px,py为未缩放前的中心点

实际为以下组合

matrix.postTranslate(-px,-py)
matrix.postScale(sx,sy)
matrix.postTranslate(px,py)

pre(前乘矩阵:M*newM)

平移
matrix.preTranslate(dx,dy)

preTranslate.png

缩放
matrix.preScale(sx,sy)

preScale.png

中心点缩放
matrix.preScale(sx,sy,px,py)//px,py为未缩放前的中心点

实际为以下组合

matrix.preTranslate(px,py)
matrix.preScale(sx,sy)
matrix.preTranslate(-px,-py)