![Android App开发进阶与项目实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/109/44510109/b_44510109.jpg)
上QQ阅读APP看书,第一时间看更新
1.2.3 利用矩阵变换位图
除了位图裁剪操作,Android还支持缩放、旋转、平移等变换操作,不过位图工具不能直接完成这些操作,而要借助于矩阵工具Matrix。因为图片是平面图形,对应于二维空间的坐标系,而矩阵是保存二维坐标的数据结构,所以处理位图变换本质上是通过矩阵映射坐标来实现的。
下面是Matrix工具常用的几个矩阵变换方法:
- postScale:指定横纵坐标两个方向的缩放比率。
- postRotate:指定旋转角度。
- postTranslate:指定横纵坐标两个方向的偏移大小。
- postSkew:指定横纵坐标两个方向的倾斜比例。
注意上述的几个变换方法仅仅设定了矩阵的变换形式,还得把矩阵对象传给位图工具的createBitmap方法,如此方能完成位图对象的变换操作。
以postScale方法为例,它的两个参数分别表示横坐标和纵坐标方向的缩放比率,值为0.5表示缩小成原来的一半,值为2表示放大成原来的两倍。这个比率值还可以是负数,表示在该方向上翻转,即镜像。比如postScale(-1, 1)表示在横坐标上翻转,且纵坐标上保持不变,最终便是镜子那样的水平镜像效果。下面是常见的位图变换方法的代码:
(完整代码见picture\src\main\java\com\example\picture\util\BitmapUtil.java)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P32_3353.jpg?sign=1739516487-8h93CH2GwzkZxJfBcjsM5ESyfF9KvN1R-0-a86963fe43902975e536a7f3995001d9)
上面代码的三个方法分别实现了位图缩放、位图翻转、位图旋转等变换操作,具体的变换效果如图1-16~图1-19所示。图1-16为变换前的画面,图1-17为水平翻转的画面,图1-18为缩放之后的画面,图1-19为旋转之后的画面。
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P33_3360.jpg?sign=1739516487-4dShmOuNeRfQH4pK0wSLztbMovg1euZc-0-db3d86a74dcf5c83ec5fbbb5c00fdc68)
图1-16 变换前的画面
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P33_3362.jpg?sign=1739516487-lMQPMJsnDm4OYOvsUfg9iRYG1kYWWDOA-0-c34e98778b8684b076582dbe2847088e)
图1-17 水平翻转的画面
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P33_3367.jpg?sign=1739516487-tBerF8bI11PcdlAoAot62hvsxaI1ltWs-0-a3615b42af03857573d23b7bec6bc57d)
图1-18 缩放之后的画面
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P33_3368.jpg?sign=1739516487-ginCYyggZOwG4pzHserOATU3Yw6PW6T0-0-317ae3c5ec86be6c09345bc3127a3417)
图1-19 旋转之后的画面