我有一个齿轮图像,我想围绕一个固定点连续旋转。
早些时候,我通过将图像作为 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/