如何在动画结束时启动一个功能?

时间:2015-12-01 15:36:00

标签: android android-animation

我有两个函数可以动画两个不同的TextView但它们似乎都是同时启动但我试图让第一个函数的动画先完成,然后启动第二个函数。

public Boolean functionFinished = false;


public void runFunction(){
    firstFunction();
    if(functionFinished = true){
       secondFunction();
    }

}


public void firstFunction(){

        initialCount = (TextView) findViewById(R.id.textView_Fade);

        initialCount.setText("3");
        final Animation out = new AlphaAnimation(1.0f, 0.0f);
        out.setDuration(1000);
        initialCount.startAnimation(out);

        out.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                if(initialCount.getText().equals("3")){
                    initialCount.setText("2");
                    initialCount.startAnimation(out);
                } else if(initialCount.getText().equals("2")){
                    initialCount.setText("1");
                    initialCount.startAnimation(out);
                } else if (initialCount.getText().equals("1")){
                    initialCount.setText("START!");

                }

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
   functionFinished = true;
}

第二个函数每秒只更改自己的textView,从0开始计数。

我做错了什么/如何纠正这个问题,以便第二个功能在第一个功能完成后运行? (即只有当firstFunction的TextView为“START!”时才将functionFinished设置为true)

3 个答案:

答案 0 :(得分:1)

public void runFunction() {
    firstFunction();
}

public void firstFunction() {
    initialCount = (TextView) findViewById(R.id.textView_Fade);

    initialCount.setText("3");
    final Animation out = new AlphaAnimation(1.0f, 0.0f);
    out.setDuration(1000);

    out.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            ...
            secondFunction();
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });

    initialCount.startAnimation(out);
}

只需从onAnimationEnd调用第二个函数即可。另请注意,您应该在开始动画之前附加侦听器。

答案 1 :(得分:1)

如果你的最低sdk版本是14: -

textView1.animate()
         .alpha(0f)
         .setDuration(400)
         .setAnimationListener(new AnimationListener() { 
          @Override 
          public void onAnimationEnd(Animation arg0) {
               // animate second textview here....
          } 
}); 

答案 2 :(得分:0)

因为您在firstFunction()的末尾指定了functionFinished = true

你必须误解initialCount.startAnimation(out)将阻止代码,firstFunction()仅在动画结束后才完成。

initialCount.startAnimation(out)不会阻止任何代码,functionFinished = true会立即运行。因此secondFunction()将在firstFunction()完成后立即运行而不是动画完成。