在安卓开发中,如何实现一个简单的图片旋转

在安卓开发中,如何实现一个简单的图片旋转,求代码,求真相!

评论 (0)链接2012-12-08 

图像的旋转有很多方法,除了常见的使用动画和矩阵,还可以通过操作背景画布本身来旋转
现将正常的图像绘制到画布中,保存一次画布后整体旋转,然后再恢复画布,此时的图像便得到了旋转的效果,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);

祝好,
斑驳敬上

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (4)链接 • 2012-12-08
  • 0 支持
    本人对UI设计一窍不通,但是支持一下neo吧。我记得android里面有一个叫Animation东东,也可以实现旋转,只是代码我不会写,呵呵。 – alimuya 2012-12-08
  • 0 支持
    @alimuya 嘿嘿,谢谢 alimuya,你说的是动画,可以通过 startAnimation 的方式播放定义的动画。 – 斑驳-neo 2012-12-08
  • 0 支持
    非常感谢您的回答! – 高高音乐 2012-12-09
  • 0 支持
    @高高音乐 嘿嘿,不客气~ – 斑驳-neo 2012-12-09

有两种方法:
1.使用动画,需要在“res\anim\”目录下创建xml文件,示例代码如下:

  
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1500"
android:fromDegrees="0.0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50.0%"
android:pivotY="50.0%"
android:toDegrees="360.0" />

2.使用Matrix矩阵旋转,示例代码如下:

  
Matrix matrix = new Matrix();
matrix.setRotate(float degrees, float px, float py);
canvas.drawBitmap(bitmap, matrix, null);
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2012-12-08
  • 0 支持
    共享一份旋转画布的方法,哈 – 斑驳-neo 2012-12-08
  • 0 支持
    非常感谢您的回答! – 高高音乐 2012-12-09

要实现图片旋转并不难,基本原理就是,先把图片绘制在一个 bitmap ,对 bitmap 旋转,再保存成图片就可以了。
源码实例:android 图片旋转

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2012-12-08
  • 0 支持
    非常感谢您的回答! – 高高音乐 2012-12-09
德问是一个专业的编程问答社区,请 登录注册 后再提交答案