当动画结束如何启动功能?结束、功能、动画

2023-09-06 23:52:47 作者:劳资就是小清新

我有动画两个不同的TextViews两个功能,但他们似乎都在同一时间开始,但我想首先第一个函数完成的动画,然后启动第二个功能。

 公共布尔functionFinished = FALSE;公共无效runFunction(){    所以firstFunction();    如果(functionFinished =真){       secondFunction();    }}公共无效了firstFunction(){        initialCount =(的TextView)findViewById(R.id.textView_Fade);        initialCount.setText(3);        最终的动画了=新AlphaAnimation(1.0F,0.0);        out.setDuration(1000);        initialCount.startAnimation(出);        out.setAnimationListener(新Animation.AnimationListener(){            @覆盖            公共无效onAnimationStart(动画动画){            }            @覆盖            公共无效onAnimationEnd(动画动画){                如果(initialCount.getText()。等于(3)){                    initialCount.setText(2);                    initialCount.startAnimation(出);                }否则如果(initialCount.getText()。等于(2)){                    initialCount.setText(1);                    initialCount.startAnimation(出);                }否则如果(initialCount.getText()。等于(1)){                    initialCount.setText(开始!);                }            }            @覆盖            公共无效onAnimationRepeat(动画动画){            }        });   functionFinished = TRUE;} 

第二个函数简单地从0变为它自己的TextView每秒计数。

我做了什么错了/我怎么纠正此,使第二函数的第一个函数完成后运行? (即套functionFinished为true,只有当从了firstFunction TextView的是开始!)

解决方案

 公共无效runFunction(){    所以firstFunction();}公共无效了firstFunction(){    initialCount =(的TextView)findViewById(R.id.textView_Fade);    initialCount.setText(3);    最终的动画了=新AlphaAnimation(1.0F,0.0);    out.setDuration(1000);    out.setAnimationListener(新Animation.AnimationListener(){        @覆盖        公共无效onAnimationStart(动画动画){        }        @覆盖        公共无效onAnimationEnd(动画动画){            ...            secondFunction();        }        @覆盖        公共无效onAnimationRepeat(动画动画){        }    });    initialCount.startAnimation(出);} 

只要打电话从 onAnimationEnd 第二功能。也请记住,你应该开始动画之前连接监听器。

怎样启用命令自动完成功能

I have two functions that animate two different TextViews but they both seem to start at the same time but I am trying to have the animation of the first function finish first and then start the second function.

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

The second function simply changes its own textView every second counting up from 0.

What did I do wrong / how do I correct this so that the second function runs after the first function has finished? (ie. sets functionFinished to true only when the TextView from the firstFunction is "START!")

解决方案

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

Just call second function from onAnimationEnd. Also keep in mind that you should attach listener before start animation.