This commit is contained in:
sloop
2016-08-02 03:24:34 +08:00
committed by GitHub
parent 454f558bbe
commit a24d7b8068

View File

@@ -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时个人建议尽量全部使用后乘或者全部使用前乘这样操作顺序容易确定出现问题也比较容易排查。<br/>当然,由于矩阵乘法不满足交换律,前乘和后乘的结果是不同的,使用时应结合具体情景分析使用。**
<p id="fangfa" />
## Matrix方法表