Подтвердить что ты не робот

Одновременно запускайте несколько ViewPropertyAnimators

С классом Animator вы можете просто вызывать что-то вроде следующего для одновременного воспроизведения нескольких анимаций:

AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(animatorsArray);
animatorSet.start();

Но я не могу найти ничего похожего, которое будет работать с ViewPropertyAnimator.

(FYI. Я пытаюсь анимировать несколько элементов listView)

4b9b3361

Ответ 1

Я знаю, что вопрос уже не один год, но так как мне нужно то же самое, и я придумал решение, я решил поделиться им:

Я создал обертку ObjectAnimator, которую вы можете использовать почти так же, как вы бы использовали ViewPropertyAnimator. И все же вы можете использовать объект ObjectAnimator, чтобы вы могли написать свой AnimatorSet.

Обертка доступна здесь.

Пример (настройка анимации тех же параметров для mTestView):

  • ViewPropertyAnimator

mTestView.animate().withLayer().alphaBy(0.3f).rotationX(27);
  1. ViewPropertyObjectAnimator (моя обложка)

ObjectAnimator objectAnimator = 
    ViewPropertyObjectAnimator.animate(mTestView).withLayer().alphaBy(0.3f).rotationX(27).get();

и у вас есть ObjectAnimator, который вы можете либо просто start(), либо использовать внутри AnimatorSet.

Ответ 2

Я бы предложил использовать withStartAction, как я уже упоминал выше.

В дальнейшем чтение ViewPropertyAnimator в документах для Android

public ViewPropertyAnimator withStartAction (Runnable runnable) Добавлен в уровень API 16

Задает действие, выполняемое при следующем запуске анимации. Если на этом ViewPropertyAnimator установлен startDelay, затем действие начнется после того, как истечет время началаDelay, когда фактическое начинается анимация. Этот метод, наряду с EndAction (Runnable), является предназначенные для облегчения хореографии ViewPropertyAnimator анимации с другими анимациями или действиями в приложении.

Я собираюсь использовать это сам, и похоже, что он работает.

Я добавил весь свой код анимации в Runnable, добавил несколько Runnables в ArrayList, и когда я был готов, я зациклился на ArrayList и назвал run() для всех из них.