Android – AnimatorSet, Object Animator – Цепь анимации Bounce объединяется?

У меня есть вопрос относительно ObjectAnimator в Android. Я пытаюсь смоделировать эффект Bounce, благодаря которому представление соскальзывает вверх (уменьшает значение Y) и возвращается вниз по той же сумме «n», за которой следует «Сдвиг вверх» вверх и вниз, но на этот раз «n / 2» (так На половину расстояния).

Таким образом, более сильный отскок, за которым следует более мелкий отскок – то есть, что-то вроде значка Mac в лотке, когда он хочет вашего внимания.

Вот что я пробовал до сих пор (предположим, что vView ):

 float y = v.getTranslationY(),distance = 20F; AnimatorSet s = new AnimatorSet(); s.play(ObjectAnimator.ofFloat(v, "translationY", y- distance).setDuration(500)) .before(ObjectAnimator.ofFloat(v, "translationY", y).setDuration(500)) .before(ObjectAnimator.ofFloat(v, "translationY", y- (distance/2)).setDuration(500)) .before(ObjectAnimator.ofFloat(v, "translationY", y).setDuration(500)); s.start(); 

Игнорируйте качество кода, это POC! Я надеялся, что это сработает, но похоже, что он только «отскакивает», как если бы он сочетал анимацию, несмотря на использование .before() .

Не могли бы вы показать мне, как я могу создавать сложные цепи AnimatorSet, которые не объединяются в один, поскольку я, кажется, что-то не хватает?

БОНУС: Для дополнительных точек, как я могу установить повторение AnimatorSet?

Большое спасибо!

Solutions Collecting From Web of "Android – AnimatorSet, Object Animator – Цепь анимации Bounce объединяется?"

ОК, поэтому я в конце концов нашел довольно аккуратный способ добиться последовательной анимации, игнорируя свободный строитель и просто используя метод playSequentially() , который:

 AnimatorSet as = new AnimatorSet(); as.playSequentially(ObjectAnimator.ofFloat(...), // anim 1 ObjectAnimator.ofFloat(...), // anim 2 ObjectAnimator.ofFloat(...), // anim 3 ObjectAnimator.ofFloat(...)); // anim 4 as.setDuration(600); as.start(); 

Тем не менее, все еще не удалось повторить, кроме грязного взлома с обратным вызовом onAnimationEnd в прослушивателе. Должен быть более простым способом, поэтому, возможно, кто-то может отредактировать это, когда они знают об этом.

В любом случае, надеюсь, что это помогает кому-то.

Когда вы используете Builder, все возвращаемые зависимости относятся к первому Animator, поэтому у вас было 3 отскока, происходящих одновременно после первого движения. К сожалению, кажется, что AnimatorSet разбит на некоторые аспекты, один из которых повторяется: https://code.google.com/p/android/issues/detail?id=17662