web-dev-qa-db-fra.com

Fin de l'événement d'animation android

J'ai une animation de fondu dans une vue (qui est à l'intérieur d'un fragment), et chaque fois que l'animation se produit, une fois qu'elle est terminée, la vue se redessine à nouveau. J'ai trouvé un travail autour de view.SetVisibility(View.GONE). Mais il n'attend pas que l'animation se termine. Je voudrais exécuter ce code setVisibility uniquement après la fin de l'animation. Quelle est la meilleure façon de le faire?

82
Paulo Barros

Vous pouvez ajouter un écouteur d'animation à votre objet d'animation, comme

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

Fonctionnellement identique à la réponse acceptée mais de manière beaucoup plus concise:

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

Prendre plaisir :)

25
Antzi

Prenez simplement votre objet d'animation et ajoutez-lui un écouteur d'animation. Voici l'exemple de code:

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


            }
        });
9
Gaurav Arora

Vous pouvez également y parvenir avec Animation.setFillAfter

8
Pavan

Exemple pour Kotlin

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
        }
    })
1
richc