Intereting Posts
Укажите максимальный размер sqlite db для моего приложения. Как обрабатывать полное исключение db Android различной ширины макетов в ViewPager Создание моделируемой среды Android в моем приложении Альтернатива Android persistence для SQLite Ошибка раздувания класса com.facebook.widget.LoginButton Значок приложения запуска не удаляется с Начального экрана при удалении приложения для Android Разница между singleTask и singleInstance Obj Фрагмент неправильный 2-й тип аргумента найден 'Android.support.V4.app.Fragment.' Требуется «Android.app.Fragment» Максимальный размер базы данных SQLite в базе данных Android-приложения? Резервное копирование Android-устройства с использованием adb Eclipse – метод NewStringUTF () не может быть разрешен Сделать изображение Файл доступен в галерее Android на Lollipop Цвет фона Viewpager пропускает первую страницу FindViewById в пользовательском представлении, чтобы найти дочерний вид Как удалить модуль в Android Studio

Повторить AnimatorSet

Есть простой способ повторить Android AnimatorSet (бесконечный). Могу ли я установить AnimationListener и перезапустить AnimatorSet, снова вызвав start ()?

Мой AnimatorSet содержит две анимации, которые воспроизводятся последовательно. Итак, если я установил режим повторения одной одиночной анимации, чтобы повторить, чем первая будет повторяться во время второй, не так ли?

Solutions Collecting From Web of "Повторить AnimatorSet"

Установить режим повторения и подсчета аниматоров дочерних объектов;

objectAnimator.setRepeatCount(ObjectAnimator.INFINITE); objectAnimator.setRepeatMode(ObjectAnimator.RESTART/REVERSE...); 

Однако это не может быть остановлено или отменено из-за еще одной ошибки.

Очевидно, я не являюсь поклонником множества способов, которыми вы можете анимировать вещи в Android, и заставить их всех терпеть неудачу в том или ином виде. Надеюсь, это поможет кому-то другому.

Ответ на первые два вопроса

Есть ли простой способ повторить Android AnimatorSet (бесконечный)? Могу ли я установить AnimationListener и перезапустить AnimatorSet, снова вызвав start ()?

Да, есть:

 mAnimationSet.addListener(new AnimatorListenerAdapter() { private boolean mCanceled; @Override public void onAnimationStart(Animator animation) { mCanceled = false; } @Override public void onAnimationCancel(Animator animation) { mCanceled = true; } @Override public void onAnimationEnd(Animator animation) { if (!mCanceled) { animation.start(); } } }); mAnimationSet.start(); 

Ответ на третий вопрос – нет. Первая анимация будет повторяться, и после всех повторений будет запущена следующая анимация.

Из моей головы – анимационная среда – источник боли, особенно если вы хотите поддержать 2.x. У меня обычно были проблемы с наборами, которые пытались сделать любой более сложный вид с AnimationListener с помощью AnimationListener – «игрока». Я отслеживаю, на какой анимации я играю (например, int т. Д.), А затем onAnimationEnd запускаю другую, которая должна быть в последовательности. Таким образом, я могу легко «списать» мою последовательность и не беспокоить сломанную структуру.

Таким образом, ни один из вышеперечисленных вариантов не подходит.

Если вы используете:

  @Override public void onAnimationEnd(Animator animation) { if (!mCanceled) { animation.start(); } } 

Вы иногда получаете исключение stackOverFlow.

Лучше всего сделать что-то вроде:

 Thread t = new Thread(new Runnable() { @Override public void run() { while (true && getActivity() != null) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { set3.start(); } }); SystemClock.sleep(1200); } } }); t.start(); 

Как насчет этого?

 @Override public void onAnimationEnd(Animator animation) { if (!mCanceled) { animation.reset(); //<- added. animation.start(); } }