Не удается очистить анимацию на виде, Android? - PullRequest
0 голосов
/ 16 ноября 2018

Поэтому я использую этот метод для анимации view на бесконечное время:

    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);
    }

Я использовал этот метод, потому что казалось, что animation.setRepeatMode() и animation.setRepeatCount() не работали и через некоторое времяпоиск Я обнаружил, что они в основном глючные.

Но когда я звоню myView.clearAnimation(), он продолжает оживлять.В чем проблема?

1 Ответ

0 голосов
/ 16 ноября 2018

Проблема в том, что вызов clearAnimation() завершает текущую анимацию ... которая запускает ваш метод onAnimationEnd(), начиная новую анимацию.

Я бы создал логический флаг дляотследить, должна ли анимация зацикливаться, и отключить ее, если вы хотите отменить анимацию.

  • Создать флаг (по умолчанию true)
private boolean shouldRepeatAnimations = true;
  • Прочтите флаг, чтобы определить, должна ли ваша анимация зацикливаться:
@Override
public void onAnimationEnd(Animation animation) {
    if (shouldRepeatAnimations) {
        view.startAnimation(animationIn);
    }
}
  • Если вы хотите отменить анимацию, также отключите флаг:
shouldRepeatAnimations = false;
view.clearAnimation();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...