0
@Override
 public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.g_out);



        g = (ImageView)findViewById(R.id.gout);
        startService(new Intent(this, MyService2.class));



        SceneAnimation come = new SceneAnimation(g, out,duration);
        SceneAnimation circled = new SceneAnimation(g, circled,durationc);

       come.play(1);



       circled.play(1);









    }







}



class SceneAnimation {
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);
}


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



};

我正在寻找解决方案,让 onCreate() 中的 2 个 SceneAnimation() 一个接一个地播放,它们同时播放,一个比另一个长,所以第二个先播放,然后第一个播放第二个结束的帧在哪里,我听说过 AnimationListener 但我不知道如何将它合并到要收听的类中,我将不胜感激演练或代码示例和解释我对此很陌生,谢谢你的时间

4

2 回答 2

0

其实很简单。创建一个 Animation 实例并将 AnimationListener 附加到它。在 onAnimationEnd 你开始你的第二个动画。瞧,两个按顺序执行的动画。

    Animation firstAnimation = new TranslateAnimation(getApplicationContext(), null);
    firstAnimation.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) { 
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            Animation secondAnimation = new TranslateAnimation(getApplicationContext(), null);
            secondAnimation.start();
        }
    });

    firstAnimation.start();
于 2012-11-18T20:50:28.163 回答
0
import android.widget.ImageView;

class SceneAnimation {
public int x;
public ImageView mImageView;
public int[] mFrameRess;
public int[] mDurations;
public int mDuration;

public int mLastFrameNo;
public long mBreakDelay;

private AnimationListener mAnimationListener;

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

public void setAnimationListener(AnimationListener listener){
this.mAnimationListener = listener;
}

public void play( final int pFrameNo ) {

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

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

        // Callback when animation ends.
        if( mAnimationListener != null ){
            mAnimationListener.onAnimationEnd();
        }
    }
}, 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 );

        // Callback when animation ends.
        if( mAnimationListener != null ){
            mAnimationListener.onAnimationEnd();
        }
    }
}, pFrameNo == mLastFrameNo && mBreakDelay > 0 ? mBreakDelay : mDuration );
}


public static interface AnimationListener {
public void onAnimationEnd();
// You can add onAnimationStart(), and do the same thing like onAnimationEnd.
}
};
于 2012-11-19T03:39:42.383 回答