From a24d7b8068128aaa8dbed7c919e22d38c18797b5 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 03:24:34 +0800 Subject: [PATCH] Update --- CustomView/Advance/[9]Matrix_Basic.md | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 676a198..0cc6a36 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -372,6 +372,35 @@ $$) 设置使用的不是矩阵乘法,而是直接覆盖掉原来的数值,所以,**使用设置可能会导致之前的操作失效**。 +## 组合 + +我们使用Matrix最终目的就是让视图显示为我们想要的状态,为此我们可能需要多种操作结合使用。 + +我发现很多讲解Matrix的文章喜欢用绕某一个点缩放(旋转)的示例来讲解,如下: + + +> + 那么我们如果想让它基于图片中心缩放,应该该怎么办?要用到组合变换, + 1)先将图片由中心平移到原点,这是应用变换 T + 2)对图应用缩放变换 S + 3)再将图片平移回到中心,应用变换 -T + +> + 对应代码: + matrix.postScale(0.5f, 0.5f); + matrix.preTranslate(-pivotX, -pivotY); + matrix.postTranslate(pivotX, pivotY); +> + PS: 此段文字引用自其它文章。 + +首先,**这个思路是没有任何问题的,也是实现绕某一点操作的核心原理**,但这可能会对一部分小白造成误解,认为只能这样实现,然而查看一下Matrix的方法表就能知道四大操作都可以指定中心点,所以,上面的三行代码用一行就能完成: + +```java +matrix.postScale(0.5f, 0.5f, pivotX, pivotY); +``` + +**组合操作构造Matrix时,个人建议尽量全部使用后乘或者全部使用前乘,这样操作顺序容易确定,出现问题也比较容易排查。
当然,由于矩阵乘法不满足交换律,前乘和后乘的结果是不同的,使用时应结合具体情景分析使用。** +

## Matrix方法表