在Android中为图片旋转动画

问题描述

在你的onCreate()中

Matrix matrix = new Matrix();

然后在onDraw

float angle = (float) (System.currentTimeMillis() % ROTATE_TIME_MILLIS) 
   / ROTATE_TIME_MILLIS * 360;
matrix.reset();
matrix.postTranslate(-source.getWidth() / 2, -source.getHeight() / 2);
matrix.postRotate(angle);
matrix.postTranslate(centerX, centerY)
canvas.drawBitmap(source, matrix, null);
invalidate(); // Cause a re-draw

ROTATE_TIME_MILLIS是完整的循环时间,例如2000为2秒。

解决方法

  • 我有一个齿轮图像,我想绕固定点连续旋转。

  • 之前,我是通过将图像作为ImageView包含在我的Android类中并对其应用RotateAnimation来实现的。

    @InjectView(R.id.gear00)              ImageView gear00;
    

    RotateAnimation ra07 = new RotateAnimation(0,359,129,186);
    ra07.setDuration(10000);
    ra07.setRepeatCount(RotateAnimation.INFINITE);
    ra07.setInterpolator(new LinearInterpolator());
    gear00.setAnimation(ra07);

基本上,我是将ImageView注入类并应用旋转动画。

但是,我再也不能使用ImageView了。我必须使用 位图 并将其在画布上旋转。

如何在画布上连续围绕固定点旋转位图来完成我在 onDraw() 方法中所做的工作?

编辑1:

我尝试了下面提到的建议之一,我的代码看起来像下面的样子

在onCreate()中:

Matrix matrix = new Matrix();
matrix.setRotate(10,100,200);

然后在onDraw()中(其中gear00Scaled是要在画布上旋转的位图):

canvas.drawBitmap(gear00Scaled,matrix,new Paint());

我尝试过的另一种方法是保存画布,旋转它,然后恢复它:

canvas.save();
canvas.rotate(10);
canvas.drawBitmap(gear00Scaled,100,200,null);
canvas.restore();

似乎都没有工作!

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”