2012-11-18 48 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