android Matrix类控制图片 View的移动、缩放、旋转、错切

[b]对图片或View组件的处理需要使用到[/b][size=medium][color=red]Matrix[/color][/size]类,[b]Matrix是一个3 x 3的矩阵工具类[/b],[b]它对图片或图片或View组件的处理分为[/b]

[color=blue][size=medium][b]Matrix旋转等操作主要针对图片的X轴Y轴上面的操作[/b][/size][/color]

[color=red]四个基本类型[/color]:

1、[b]Translate[/b]————[color=red]平移变换[/color]

2、[b]Scale[/b]————[color=red]缩放变换[/color]

3、[b]Rotate[/b]————[color=red]旋转变换[/color]

4、[b]Skew[/b]————[color=red]错切变换[/color]

[b]set pre post方法总结[/b]
[size=medium][color=red][b]set方法一旦调用即会清空之前matrix中的所有变换[/b][/color][/size]

[size=medium][color=blue][b]后调用的pre操作先执行,而后调用的post操作则后执行。[/b][/color][/size]

[color=red][b]我们可以使用pre或者post方法来定义各种变换次序。[/b][/color]

在Android的API里对于[color=red]每一种变换都提供了三种操作方式[/color]:[b]set(用于设置Matrix中的值)[/b]、[b]post(后乘,根据矩阵的原理,相当于左乘)[/b]、[b]pre(先乘,相当于矩阵中的右乘)[/b]。[color=red]默认时,这四种变换都是围绕(0,0)点变换的[/color],当然可以自定义围绕的中心点,通常围绕中心点。

[color=red]Translate[/color]
首先说说平移,在对图片处理的过程中,[color=red]最常用的就是对图片进行平移操作[/color],该方法为[b]setTranslate[/b],平移意味着在x轴和y轴上简单地移动图像。setTranslate方法采用两个浮点数作为参数,表示在每个轴上移动的长度。[b]第一个参数是图像将在x轴上移动的数量,而第二个参数是图像将在y轴上移动的长度。[/b]在x轴上使用[color=red]正数进行平移将向右移动图像[/color],而使用[color=red]负数将向左移动图像[/color]。在y轴上使用正数进行平移将向下移动图像,而使用负数将向上移动图像。

[color=red]Scale[/color]
再看缩放,Matrix类中另一个有用的方法是[b]setScale[/b]方法。它采用两个浮点数作为参数,分别表示在每个轴上所产生的缩放量。[b]第一个参数是x轴的缩放比例,而第二个参数是y轴的缩放比例。[/b]如:matrix.setScale(1.5f,1);

[color=red]Rotate[/color]
比较复杂的就是图片的旋转了,内置的方法之一是[b]setRotate[/b]方法。它采用一个浮点数表示旋转的角度。[color=red]围绕默认点(0,0)[/color],正数将顺时针旋转图像,而负数将逆时针旋转图像,其中默认点是图像的左上角,如:

Matrix matrix = new Matrix();
matrix.setRotate(15);

另外,也可以[color=red]使用旋转的角度及围绕的旋转点作为参数调用setRotate方法[/color]。选择图像的中心点作为旋转点,如:
[color=red]matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);[/color]

[color=red]Skew[/color]
对于错切变换,在数学上又称为Shear mapping(可译为“剪切变换”)或者Transvection(缩并),它是一种比较特殊的线性变换。错切变换的效果就是让所有点的x坐标(或者y坐标)保持不变,而对应的y坐标(或者x坐标)则按比例发生平移,且平移的大小和该点到x轴(或y轴)的垂直距离成正比。错切变换,属于等面积变换,即一个形状在错切变换的前后,其面积是相等的。


对于程序中,[color=red]一个特别有用的方法对是setScale和postTranslate[/color],它们允许跨单个轴(或者两个轴)翻转图像。如果以一个负数缩放,那么会将该图像绘制到坐标系统的负值空间。[b]由于(0,0)点位于左上角,使用x轴上的负数会导致向左绘制图像。[/b]因此我们需要使用[color=red]postTranslate[/color]方法,将图像向右移动,如:

[color=red]matrix.setScale(-1, 1);[/color]
[b]matrix.postTranslate(bmp.getWidth(),0);[/b]

可以在y轴上做同样的事情,翻转图像以使其倒置。通过将图像围绕两个轴上的中心点旋转180°,可以实现相同的效果,如
[color=red]matrix.setScale(1, -1);[/color]
[b]matrix.postTranslate(0, bmp.getHeight());[/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值