2012-11-18 46 views
-1
class SceneAnimation extends Animation{ 
public int x; 
public ImageView mImageView; 
public int[] mFrameRess; 
public int[] mDurations; 
public int mDuration; 

public int mLastFrameNo; 
public long mBreakDelay; 

public SceneAnimation(ImageView pImageView, int[] pFrameRess, int[] pDurations) 
{ 

    mImageView = pImageView; 
    mFrameRess = pFrameRess; 
    mDurations = pDurations; 
    mLastFrameNo = pFrameRess.length - 1; 

    play(1); 
} 

    public SceneAnimation(ImageView pImageView, int[] pFrameRess, int pDuration){ 
    mImageView = pImageView; 
    mFrameRess = pFrameRess; 
    mDuration = pDuration; 
    mLastFrameNo = pFrameRess.length - 1; 

    mImageView.setImageResource(mFrameRess[0]); 
    playConstant(1); 
} 

    public SceneAnimation(ImageView pImageView, int[] pFrameRess, int pDuration, long pBreakDelay){    
    mImageView = pImageView; 
    mFrameRess = pFrameRess; 
    mDuration = pDuration; 
    mLastFrameNo = pFrameRess.length - 1; 
    mBreakDelay = pBreakDelay; 

    mImageView.setImageResource(mFrameRess[0]); 
    playConstant(1); 
} 


synchronized void play(final int pFrameNo) 
{ 


    mImageView.postDelayed(new Runnable(){ 
     public void run() { 


      mImageView.setImageResource(mFrameRess[pFrameNo]); 
      if(pFrameNo == mLastFrameNo) 
       { 
       return;} 
      else 
       play(pFrameNo + 1); 
     } 
    }, mDurations[pFrameNo]); 
} 


public void playConstant(final int pFrameNo){ 
    mImageView.postDelayed(new Runnable(){ 
     public void run() {      
      mImageView.setImageResource(mFrameRess[pFrameNo]); 

      if(pFrameNo == mLastFrameNo) 
       playConstant(0); 
      else 
       playConstant(pFrameNo + 1); 
     } 
    }, pFrameNo==mLastFrameNo && mBreakDelay>0 ? mBreakDelay : mDuration); 
} 



}; 

我可以用這個打出來了很多框架,我不能依次播放一個動畫或動畫之間暫停在這樣的IM試圖找出一種方法來使用AnimationListener一旦我有了實例化這個類如何鏈接自定義動畫?

+0

解釋你想要以更好的方式做什麼。目前尚不清楚。你想觸發一個事件並通知之前註冊的動畫偵聽器嗎?你想讓你的組件發起動畫事件? – Snicolas

+0

Theres只有1個ImageView,如果我製作了2個SceneAnimation()並將它們放在oncreate()中,它們會在同一時間播放,我試圖讓它們一個接一個地播放。 – JRowan

回答

0

添加一個AnimationListener作爲你的類的一個字段,添加一個setter。然後其他類可以將偵聽器添加到SceneAnimation中。

之後,創建一個方法fireFooEvent,以將事件觸發到偵聽器(如果偵聽器不爲null)。

然後使用SceneAnimation類中的那些fire方法來通知可能的動畫偵聽器的開始和結束。

接下來,在您的活動中,向第一個動畫添加一個偵聽器,將其啓動。當聽衆將收到第一個動畫的結尾時,開始第二個動畫。

---一些代碼

public void setAnimationLIstener(AnimationListener listener) { 
this.animationListener = listener; 
} 

public void fireOnAnimationEnd(Animation animation)() { 
if(this.animationListener == null) { 
    return; 
} 
this.animationListener.onAnimationEnd(animation); 
} 

而對於每一個事件做更新。然後你可以很容易地通知你的AnimationScene對象發生了什麼。

+0

你可以給我一些代碼示例 – JRowan

+0

沒有。你不明白哪一部分?你嘗試了什麼? – Snicolas

+0

添加一個setter和fireFooEvent – JRowan