2010-04-23 56 views
3

我想要一個簡單的圖像動畫去。我想讓它看起來好像直升機的螺旋槳葉片正在轉動。我爲直升機拍攝了3張圖像,並根據動畫進度顯示其中一張圖像。問題是所有三個圖像最終彼此重疊,而不是一次顯示一個圖像,從而創建動畫。這是我到目前爲止所做的,我甚至試圖通過做這個canvas.drawColor(Color.BLACK)來清除畫布,但是這將清除整個畫布,這不是我想要的。如何做Android圖像動畫

這是我有:

在視圖類1):

靜態類直升機{ 私人長期mLastUpdate; private long mProgress = 0; private final float mX; private final float 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(); 
    } 

有人可以幫助我嗎?我看過很多關於動畫網頁的例子,他們似乎總是涉及文本,但不涉及圖像。謝謝。

回答

1

通常繪製畫布的線程會重繪整個畫布和所有道具/演員。這樣,如果您增加直升機刀片圖像索引,則在重新繪製畫布的其餘部分後,將繪製該圖像索引。例如:背景 - >直升機 - > Blade1下一次迭代背景 - >直升機 - > Blade2。