等待ImageView中的一个动画停止再启动另一个动画?

时间:2012-11-18 02:02:48

标签: android animation oncreate

 public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.genie_out);



        genie = (ImageView) findViewById(R.id.genieout);
        startService(new Intent(this, MyService2.class));
        SceneAnimation come = new SceneAnimation(genie, comingout,     durationcomingout);
        SceneAnimation circled = new SceneAnimation(genie, circle,durationcircle);

       come.play(1);



       circled.play(1);


    }

有一个ImageView,它需要整个屏幕,我想知道如何等到come.play(1)完成播放circle.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);
}



};

1 个答案:

答案 0 :(得分:1)

这是实现自己的AnimationListener

的一种方法
package com.example.intentfiletersample;

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

始终建议您首先浏览Android sdk附带的Animation API,看看是否适合您,然后再实现自己的。

希望得到帮助。