问题描述
在你的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();
似乎都没有工作!