0
 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が1つあり、画面全体が必要です。このサークルが最初に再生されてから、残りの部分が再生されるように、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);
}



};
4

1 に答える 1

1

独自のAnimationListenerを実装する1つの方法は次のとおりです

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

アニメーションAPIにはAndroidSDKが付属しているので、最初に確認することを常にお勧めします。独自のAPIを実装する前に、自分に合ったものかどうかを確認してください。

この助けを願っています。

于 2012-11-19T01:42:46.180 に答える