50 votes

Écouteur d'animation Android

OnTouch d'un ImageView Je commence un fondu en animation :

    myImageView.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
    v.startAnimation(fadeInAnimation);

Je sais que j'ai besoin d'un écouteur d'animation pour savoir quand l'animation est terminée, mais comment puis-je le joindre pour obtenir la vue sur laquelle l'animation vient de se terminer ? Je veux définir la visibilité de la vue après que l'animation soit terminée.

Gracias

1 votes

Je veux savoir comment ajouter un écouteur d'animation à une vue d'image.

131voto

peanut Points 1500

Je pense que tu as besoin de ça.

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

    }

    @Override
    public void onAnimationEnd(Animation animation) {

    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
});

0 votes

Si vous n'avez besoin d'utiliser qu'un sous-ensemble des méthodes, vous pouvez utiliser AnimatorListenerAdapter puis ne surchargez que celles dont vous avez besoin (par exemple, onAnimationEnd()).

26voto

jonas Points 975

Si vous n'avez besoin que d'une action finale, il suffira d'utiliser .withEndAction(Runnable)

fadeInAnimation.withEndAction(new Runnable() {
    @Override
    public void run() {
        ... do stuff
    }
})

5 votes

Utilisable uniquement avec le niveau 16 de l'API ou plus

4 votes

Je vise le niveau 22 de l'API et je ne vois pas ça. withEndAction() comme étant disponible avec la classe TranslateAnimation

0 votes

@Roel pouvez-vous m'indiquer le lien ? Je veux vérifier. api niveau

7voto

Noelia Points 530

Au cas où quelqu'un aurait besoin de la solution dans kotlin :

fadeInAnimation.setAnimationListener(object: Animation.AnimationListener {
        override fun onAnimationRepeat(animation: Animation?) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }

        override fun onAnimationEnd(animation: Animation?) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }

        override fun onAnimationStart(animation: Animation?) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }

    })

4voto

Hitesh Sahu Points 12561

Utilisation de Kotlin

        //OR using Code
        val rotateAnimation = RotateAnimation(
                0f, 359f,
                Animation.RELATIVE_TO_SELF, 0.5f,
                Animation.RELATIVE_TO_SELF, 0.5f

        )
        rotateAnimation.duration = 300
        rotateAnimation.repeatCount = 2

        //Either way you can add Listener like this
        rotateAnimation.setAnimationListener(object : Animation.AnimationListener {

            override fun onAnimationStart(animation: Animation?) {
            }

            override fun onAnimationRepeat(animation: Animation?) {
            }

            override fun onAnimationEnd(animation: Animation?) {

                val rand = Random()
                val ballHit = rand.nextInt(50) + 1
                Toast.makeText(context, "ballHit : " + ballHit, Toast.LENGTH_SHORT).show()
            }
        })

        ivBall.startAnimation(rotateAnimation)

0 votes

Bonjour, j'ai une question à propos de votre code, je l'ai utilisé pour ma question - pouvez-vous peut-être y jeter un coup d'œil : stackoverflow.com/questions/59253778/

3voto

Tung Tran Points 59

Ma fonction setAnimation

private Animation animateRoationLayout(Animation.AnimationListener animationListener) {
    Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.level_expand_rotation);
    anim.setInterpolator(new LinearInterpolator()); // for smooth animation
    anim.setAnimationListener(animationListener);
    return anim;
}

Définir l'écouteur d'animation :

final Animation.AnimationListener animationListener =new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            Toast.makeText(getActivity(),"Animation Have Done", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    };

Définir l'animation pour la vue :

  view.startAnimation(animateRoationLayout(animationListener));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X