私は単純な画像アニメーションを始めようとしています。ヘリコプターのプロペラ ブレードが回転しているように見せたいです。ヘリコプターの 3 つの画像があり、アニメーションの進行状況に応じてこれらの画像の 1 つを表示しています。問題は、一度に 1 つの画像だけが表示されるのではなく、3 つの画像すべてが互いに重なってしまい、アニメーションが作成されることです。これは私がこれまで行ったことであり、このcanvas.drawColor(Color.BLACK)を実行してキャンバスをクリアしようとしましたが、それはキャンバス全体をクリアしてしまいます。これは私が望むものではありません。
これは私が持っているものです:
1) View クラスで:
静的クラス ヘリコプター {プライベート ロング mLastUpdate; プライベート ロング mProgress = 0; プライベート最終フロート mX; プライベート最終フロート mY;
private final Bitmap mHelicopter1;
private final Bitmap mHelicopter2;
private final Bitmap mHelicopter3;
private final float mRadius;
Helicopter(long mLastUpdate, float mX, float mY,
Bitmap helicopter1, Bitmap helicopter2, Bitmap helicopter3) {
this.mLastUpdate = mLastUpdate;
this.mX = mX;
this.mY = mY;
this.mHelicopter1 = helicopter1;
this.mHelicopter2 = helicopter2;
this.mHelicopter3 = helicopter3;
mRadius = ((float) mHelicopter1.getWidth()) / 2f;
}
public void update(long now) {
mProgress += (now - mLastUpdate);
if(mProgress >= 400L)
{
mProgress = 0;
}
mLastUpdate = now;
}
public void setNow(long now) {
mLastUpdate = now;
}
public void draw(Canvas canvas, Paint paint)
{
if (mProgress < 150L)
{
canvas.drawBitmap(mHelicopter1, mX - mRadius, mY - mRadius, paint);
}
else if (mProgress < 300L)
{
canvas.drawBitmap(mHelicopter2, mX - mRadius, mY - mRadius, paint);
}
else if(mProgress < 400L)
{
canvas.drawBitmap(mHelicopter3, mX - mRadius, mY - mRadius, paint);
}
}
public boolean done() {
return mProgress > 700L;
}
}
private ArrayList<Helicopter> mHelicopters = new ArrayList<Helicopter>();
2) これは、スレッドの run() で呼び出されています。
private void doDraw(Canvas canvas)
{
final long now = SystemClock.elapsedRealtime();
canvas.save();
for (int i = 0; i < mHelicopters.size(); i++) {
final Helicopter explosion = mHelicopters.get(i);
explosion.update(now);
}
for (int i = 0; i < mHelicopters.size(); i++) {
final Helicopter explosion = mHelicopters.get(i);
explosion.draw(canvas, mPaint);
}
canvas.restore();
}
誰かが私を助けることができますか?私はアニメーションに関するウェブ上の多くの例を見てきましたが、それらには常にテキストが含まれているようですが、画像は含まれていないようです。ありがとう。