图像的旋转有很多方法,除了常见的使用动画和矩阵,还可以通过操作背景画布本身来旋转

现将正常的图像绘制到画布中,保存一次画布后整体旋转,然后再恢复画布,此时的图像便得到了旋转的效果,google 官方也推荐使用这种方式来旋转图像,效率也高于矩阵旋转,而且相比之下,画布的旋转不容易失真,这一点是非常重要的。

附上实例代码:

// [Neo] 将需要的图像绘制到画布上面
canvas.drawBitmap(picture, 0, 0, null);
// [Neo] 保存一下当前画布,很重要哦
canvas.save();
// [Neo] 旋转 angle 度,起始座标为 0, 0
canvas.rotato(angle, 0, 0);
// [Neo] TODO 做些你需要的其他操作
// ...
// [Neo] 恢复画布
canvas.restore();

若不是在派生的 View 类重写的 onDraw 方法来修改画布的话,其实还可以通过代码直接绘制一个bitmap对象,可参考:

// [Neo] 创建一个空白的 Bitmap,需要指定长和宽哦
Bitmap bitmap = Bitmap.createBitmap(width, height,
rawable.getOpacity() != PixelFormat.OPAQUE ?
Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
// [Neo] 直接拿上面的 Bitmap 作为画布的原材料
Canvas canvas = new Canvas(bitmap);
// [Neo] 然后在画布上面绘制你需要的东东,如果需要旋转,可套用上面的方法
// [Neo] ...
// [Neo] 最后拿着 bitmap 去填充控件就是啦,比如 ImageView
imageView.setImageBitmap(bitmap);