Android App开发进阶与项目实战
上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)

上面代码的三个方法分别实现了位图缩放、位图翻转、位图旋转等变换操作,具体的变换效果如图1-16~图1-19所示。图1-16为变换前的画面,图1-17为水平翻转的画面,图1-18为缩放之后的画面,图1-19为旋转之后的画面。

图1-16 变换前的画面

图1-17 水平翻转的画面

图1-18 缩放之后的画面

图1-19 旋转之后的画面