Matrix 类学习 (二)

昨天还担心自己写不了第二篇, 今天就继续学习了 😁.

map 系函数

昨天学习了 set 系 pre/post 系函数, 再剩下一类就是 map 系函数.

Matrix 矩阵的作用是对图像进行变换, Matrix.map 的作用就是用这个矩阵来对点, 向量, 矩形等图形施加变换.

这一系列方法包含以下:

  • mapPoints 用当前矩阵对一个点或者多个点进行变换
  • mapVectors 对一个或多个向量
  • mapRect 对矩形
  • mapRadius 对圆的半径

每个方法都包含两种赋值形式:

  • map*(dst, src) 将 src 经由 Matrix 变换的结果存到 dst 中
  • map*( 只有一个参数 ) 将变换后的结果写回到参数中

还剩下哪些方法

最后再看看还剩下哪些方法没有看到.

hashCode

返回值是固定的:

return 44;

重度使用的时候小心这里有坑.

setRectToRect

boolean setRectToRect(RectF src, RectF dst, ScaleToFit stf)

举个例子来说明吧:

Matrix m = imageView.getImageMatrix();
RectF drawableRect = new RectF(0, 0, imageWidth, imageHeight);
RectF viewRect = new RectF(0, 0, imageView.getWidth(), imageView.getHeight());
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
imageView.setImageMatrix(m);

在上面的代码中, 有一个 ImageView 叫 imageView. 还有一个图, 它的宽度和高度分别是 imageWidth 和 imageHeight, 图已经设置到 ImageView 中显示.

setPolyToPoly

这个跟上面这个在方法名上是相似的.

找到两篇讲解这个方法的文章:

看来在实现中的那些酷炫的折叠效果都是主要通过这个方法来实现的.

invert

求矩阵的逆矩阵. 如果矩阵不可逆则返回 false.