-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);
}



};

我可以用它来播放很多帧,我不能一个接一个地播放一个动画,或者在动画之间暂停,所以一旦我实例化了这个类,我就试图找出一种使用 AnimationListener 的方法

4

1 回答 1

0

添加一个 AnimationListener 作为类的字段,添加一个 setter。然后其他类可以为您的 SceneAnimation 添加一个侦听器。

之后,创建一个方法 fireFooEvent 以在侦听器不为空时向您的侦听器触发事件​​。

然后在 SceneAnimation 类中使用这些触发方法来通知潜在的侦听器动画的开始和结束。

接下来,在您的活动中,为第一个动画添加一个侦听器,启动它。当侦听器将收到第一个动画的结束时,启动第二个动画。

---更新了一些代码

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

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

并为每个事件执行此操作。然后,您可以轻松地通知侦听器您的 AnimationScene 对象中发生的情况。

于 2012-11-18T09:17:54.660 回答