动画结束后如何继续处理?

时间:2012-03-25 04:58:43

标签: android android-animation

情况如下。我的Activity正在运行,我调用一个函数来启动动画。一旦这个动画结束,我需要等待另外2秒,然后正常继续该过程。你有什么建议我做的?

当我到达迭代结束时,OnAnimationEnd对我的情况没有帮助,我的进程已经从调用函数返回并继续处理。 你觉得我怎么样?做thread.sleep(动画的持续时间+ 2秒)? 感谢

编辑: 好吧我想也许我应该在代码中解释我在做什么 我有以下代码

Public class myclassActivity extends Activity{
..
.
.
.
 public void runGame(){

  player1.startAnimating();
  player2.start Animating();
  player3.startAnimating();
  updateStatus();
  runGame();
 }

}

因此,您可以看到我的活动一直为每个玩家调用startAnimating。其中一些工作,然后动画1秒钟。

我不想让player2.startAnimation开始,直到player1.startAnimation完成,等等其余的代码。 目前发生的是代码完全执行并在动画仍在运行时再次重新运行。对此有任何帮助吗?

3 个答案:

答案 0 :(得分:2)

观察这段代码,这对你有帮助。

public class PlayersActivity extends Activity {
ImageView I1,I2;
Button B;
Animation T1,T2;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    I1=(ImageView)findViewById(R.id.i1);
    I2=(ImageView)findViewById(R.id.i2);

    B=(Button)findViewById(R.id.b1);

    B.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            T1=new TranslateAnimation(0,100,0,0);
            T1.setDuration(1000);
            I1.startAnimation(T1);
            T1.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    T2=new TranslateAnimation(0,100,0,0);
                    T2.setDuration(1000);
                    T2.setStartOffset(2000);
                    I2.startAnimation(T2);
                    T2.setAnimationListener(new AnimationListener() {

                        @Override
                        public void onAnimationStart(Animation animation) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void onAnimationRepeat(Animation animation) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void onAnimationEnd(Animation animation) {
                            T1.setStartOffset(2000);
                            I1.startAnimation(T1);

                        }
                    });

                }
            });


        }
    });

}

}

假设你在完成player3之后启动这两个方法,你将player3放在AnAnimationEnd(){updateStatus(); runGame();}

答案 1 :(得分:0)

使用postDelayed函数在确切延迟后运行某些内容。例如(延迟2秒):

LinearLayout.postDelayed(new Runnable() { 
    public void run() { 
      //Do something
    } 
}, 2000);

答案 2 :(得分:0)

如何通过

传递调用者实例
player1.startAnimating(this)

然后调用类似

的方法
myclassActivity#animationFinished(this) 

完成播放器1/2的动画?然后

void animationFinished(Player p) {
   if (p==player1) {
       player2.start();
   } else if (p==player2) {
       player3.start();
   }
}

或其他什么