Конец анимации

У меня есть анимация fadeout в представлении (внутри фрагмента), и каждый раз, когда происходит анимация, после того, как она заканчивается, просмотр снова перерисовывается. Я нашел работу вокруг view.SetVisibility(View.GONE). Но он не ждет окончания анимации. Я хотел бы выполнить этот код setVisibility только после завершения анимации. Каков наилучший способ сделать это?

Ответ 1

Вы можете добавить прослушиватель анимации к вашему объекту анимации, например

anim.setAnimationListener(new Animation.AnimationListener(){
    @Override
    public void onAnimationStart(Animation arg0) {
    }           
    @Override
    public void onAnimationRepeat(Animation arg0) {
    }           
    @Override
    public void onAnimationEnd(Animation arg0) {
    }
});

Ответ 2

Функционально то же, что и принятый ответ, но более сжатым способом:

                           /* Add/Remove any animation parameter */
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() {
    @Override
        public void run() {
            theView.setVisibility(View.GONE);
        }
    });

Наслаждайтесь:)

Ответ 3

Вы также можете достичь этого, используя Animation.setFillAfter

Ответ 4

Просто возьмите свой объект анимации и добавьте к нему прослушиватель анимации. Вот пример кода:

rotateAnimation.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) {
                // TODO Auto-generated method stub

**// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION**


            }
        });