Кінець анімаційної події android


90

У мене є анімація згасання у поданні (яка знаходиться всередині фрагмента), і кожного разу, коли відбувається анімація, після її закінчення подання перемальовується знову. Я знайшов роботу навколо робити view.SetVisibility(View.GONE). Але це не чекає закінчення анімації. Я хотів би виконати цей код setVisibility лише після закінчення анімації. Який найкращий спосіб це зробити?


Опублікуйте свій код, як ви показуєте анімацію ....
Lalit Poptani

Відповіді:


171

Ви можете додати слухач анімації до свого об’єкта анімації, наприклад

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

5
Якщо ви хочете, щоб анімація згасання не запускалася знову, поки триває анімація, використовуйте, if (!anim.hasStarted() || anim.hasEnded())щоб визначити, чи анімація все ще працює.
theczechsensation

34

Функціонально те саме, що прийнята відповідь, але набагато коротше:

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

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


2
Прозорий і однокласний. Найкраща відповідь! Можна .withEndAction(() -> theView.setVisibility(View.GONE));
спростити за допомогою лямбди

2
Майте на увазі, що це рівень API 16 (4.1) і вище.
Томмі

Дивовижне рішення, друже. Дякую!
Влад Івченко

Важлива інформація: - Дія виконується лише в тому випадку, якщо анімація закінчується нормально. Якщо ViewPropertyAnimator скасовано під час цієї анімації, запущений не буде запущений.
Sarthak_ssg5

Працює як шарм, також коли використовується компонент навігації в runnable. (Прослуховувач анімації Alwys зазнав аварії, коли я
навігував


9

Просто візьміть свій анімаційний об’єкт і додайте до нього прослуховувач анімації. Ось приклад коду:

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**


            }
        });

1

Приклад для Котліна

var fadeOutImage = findViewById<ImageView>(R.id.fade_out_Image)
    val fadeOutAnimation = R.anim.fade_out_animation
    val animation = AnimationUtils.loadAnimation(this, fadeOutAnimation)
    fadeOutImage.startAnimation(animation)

    animation.setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationStart(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationRepeat(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationEnd(p0: Animation?) {
            fadeOutImage.visibility = View.INVISIBLE
        }
    })

ви можете зберегти кілька рядків, використовуючиfade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()
longi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.