java - 在 Android 中动画旋转图像

标签 java android android-layout android-canvas wear-os

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

  • 早些时候,我通过将图像作为 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 注入(inject)到类中并应用旋转动画。

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

我怎样才能完成我之前在 onDraw() 方法中使用位图围绕 Canvas 上的固定点连续旋转的操作?

编辑1:

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

在 onCreate() 中:

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

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

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

我尝试的另一种方法涉及保存 Canvas 、旋转它,然后恢复它:

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

虽然两者似乎都不起作用!

最佳答案

创建一个 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" />

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

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

要使用位图来完成,我希望以下代码序列对您有所帮助:

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());

如果检查以下方法:

~frameworks\base\graphics\java\android\graphics\Bitmap.java

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height,
        Matrix m, boolean filter)

这将解释旋转和平移的作用。

关于java - 在 Android 中动画旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832881/

相关文章:

java - SSL 没有对等证书 Android

java - 如何使用Azure认知系统?

android - Jetpack 用点圆组成画弧

java - 如何在卡片 View 的侧面设置颜色

Android从tablayout选项卡中删除自定义 View

android - 我应该使用什么布局

java - 如何将数据数组附加到未知大小的数组

java - 使用HQL查询关联表

JavaFX Css 上下文菜单不工作

Android 将当前的 Fragment 类转换为 Activity 类