2012-11-16 13 views
6

Mam pytanie dotyczące ObjectAnimator w systemie Android. Próbuję wymodelować efekt Odbicie, w którym widok przesuwa się w górę (zmniejszając wartość Y) i z powrotem w dół o tę samą wartość "n", a następnie przesuwa się widok w górę iw dół, ale tym razem o "n/2" (czyli połowa odległości).Android - AnimatorSet, Object Animator - łączy się animacja Bounce?

Tak więc większe odbijanie, po którym następuje płytsza odskok - to znaczy coś, co ikona Maca robi na tacy, gdy chce twojej uwagi.

Oto, co starałem tak daleko (zakładamy v jest View):

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

Ignoruj ​​jakość kodu, to POC! Miałem nadzieję, że to zadziała, ale wydaje się, że "odbija się" tylko tak, jakby łączyło animacje mimo użycia .before().

Czy mógłbyś pokazać mi, jak mogę utworzyć złożone łańcuchy AnimatorSet, które nie łączą się z jednym, ponieważ wydaje mi się, że czegoś brakuje?

BONUS: Aby uzyskać dodatkowe informacje, jak ustawić powtarzanie AnimatorSet?

Wielkie dzięki!

Odpowiedz

16

OK więc ostatecznie znalazł dość zgrabny sposób, aby osiągnąć sekwencyjnej animacji ignorując płynny wypełniacz, a tylko przy użyciu metody playSequentially() takie, że:

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

Nadal nie wypracowaliśmy powtarzając jednak, inny niż brudny hack, w którym występuje wywołanie odAnimationEnd w detektorze. Musi to być prostszy sposób, więc być może ktoś może to edytować, gdy się o tym dowie.

W każdym razie, mam nadzieję, że powyższe pomaga komuś.

+0

użyj http://www.jefflinwood.com/2013/04/repeating-android-animations-with-animatorset/ jeśli chcesz powtórzyć –

+0

"Brudny hack z wywoływaniem onAnimationEnd w słuchaczu" - Wydaje się, że artykuł opisuje to samo podejście. – ComethTheNerd

+0

Och, źle odczytałem twój komentarz. Jednak wywołanie od momentu zakończenia animacji nie będzie się liczyło jako brudne IMO. –

3

Kiedy używasz Konstruktora, wszystkie powracające zależności odnoszą się do pierwszego Animatora, więc po pierwszym ruchu miały miejsce 3 odbicia. Niestety wygląda na to, że AnimatorSet jest zepsuty pod pewnymi względami, a jednym z nich jest powtarzanie: https://code.google.com/p/android/issues/detail?id=17662