Update
This commit is contained in:
@@ -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方法表
|
||||
|
||||
|
||||
Reference in New Issue
Block a user