Więc używam tej metody do animowania view przez nieskończony czas:

    private void animateView (final View view) {
        final Animation animationIn = AnimationUtils.loadAnimation(this,R.anim.fade_in);
        final Animation animationOut = AnimationUtils.loadAnimation(this, R.anim.fade_out);

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

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                view.startAnimation(animationOut);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        animationOut.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                view.startAnimation(animationIn);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        view.startAnimation(animationIn);
    }

Użyłem tej metody, ponieważ wyglądało na to, że animation.setRepeatMode() i animation.setRepeatCount() nie działają i po krótkim wyszukiwaniu odkryłem, że są w zasadzie błędne.

Ale kiedy dzwonię myView.clearAnimation(), wciąż się animuje. Jaki jest problem?

0
SSP 16 listopad 2018, 18:49

1 odpowiedź

Najlepsza odpowiedź

Problem polega na tym, że wywołanie clearAnimation() kończy bieżącą animację... co uruchamia Twoją metodę onAnimationEnd(), rozpoczynając nową animację.

Stworzyłbym flagę logiczną, aby śledzić, czy animacje powinny się zapętlać, i wyłączać ją, gdy chcesz anulować animacje.

  • Utwórz flagę (domyślnie true)
private boolean shouldRepeatAnimations = true;
  • Przeczytaj flagę, aby określić, czy animacje powinny się zapętlać:
@Override
public void onAnimationEnd(Animation animation) {
    if (shouldRepeatAnimations) {
        view.startAnimation(animationIn);
    }
}
  • Jeśli chcesz anulować animację, wyłącz także flagę:
shouldRepeatAnimations = false;
view.clearAnimation();
3
Ben P. 16 listopad 2018, 19:05