Android中图像的旋转动画

rmo*_*h21 3 java android android-layout android-canvas wear-os

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

  • 之前我通过在我的Android类中将图像作为ImageView包含并对其应用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);
    
    Run Code Online (Sandbox Code Playgroud)

基本上,我将ImageView注入到类中并应用旋转动画.

但是,我再也没有使用ImageView的奢侈了.我必须使用Bitmap并在画布上旋转它.

我怎样才能在onDraw()方法中完成我之前正在做的事情,并且在画布上连续旋转固定点的位图?

EDIT1:

我尝试了下面提到的一个建议,我的代码看起来有点像下面的内容

在onCreate()中:

Matrix matrix = new Matrix();
matrix.setRotate(10, 100, 200);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

似乎都没有工作!

Tus*_*gna 9

创建一个XML类(假设:rotate.xml)并将其放在res/anim文件夹中,然后在其中编写以下代码:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:toDegrees="360" />
Run Code Online (Sandbox Code Playgroud)

然后在您的java类中,执行以下操作OnCreate:

final Animation a = AnimationUtils.loadAnimation(CustomActivity.this,
                R.anim.rotate);
        a.setDuration(3000);
        gear00.startAnimation(a);
Run Code Online (Sandbox Code Playgroud)

要么

要使用位图,我希望以下代码序列可以帮助您:

Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight, config);
Canvas canvas = new Canvas(targetBitmap);
Matrix matrix = new Matrix();
matrix.setRotate(mRotation,source.getWidth()/2,source.getHeight()/2);
canvas.drawBitmap(source, matrix, new Paint());
Run Code Online (Sandbox Code Playgroud)

如果您从以下方法检查以下方法:

〜框架\基\图形\ java中\机器人\图形\ Bitmap.java

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height,
        Matrix m, boolean filter)
Run Code Online (Sandbox Code Playgroud)

这可以解释它对旋转和翻译的作用.