2015-03-20 14 views
5

Po prostu wykonuję prosty projekt, w którym staram się pokazać/ukryć układ na wierzchu LinearLayout z TranslacjaAnimation. Nastąpiło migotanie, ponieważ po wywołaniu funkcji AnimationEnd() animacja nie została zakończona przez 0,1 sekundy.ObjectAnimator kontra TranslateAnimation

Przykład:

  @Override 
      public void onAnimationEnd(Animation animation) { 
       retractableLayout.setVisibility(View.GONE); 
      } 

Kiedy wyszukiwać stackoverflow znalazłem istnieje inny sposób to zrobić. Z ObjectAnimatorem. Po jego użyciu moja animacja była w porządku bez jakiejkolwiek różnicy między TranslateAnimation i ObjectAnimator? Czy jeden z nich jest przestarzały i robią to samo, albo jest czas, kiedy jedno lub drugie jest lepsze.

Oto repo github z 2 wersjach (https://github.com/charlesvigneault/AAA_Test1)

Dzięki

Odpowiedz

13

Różnica polega przede wszystkim, że w przypadku korzystania z TranslateAnimation, widok którego jest animowanie naprawdę nie opuścić swoją pierwotną pozycję na ekranie, to właśnie sprawia, że ​​wyglądają jak to jest w ruchu. Więc widok zasadniczo nie zmienia swoich współrzędnych.

zobacz ten film o Zobacz animacje: https://www.youtube.com/watch?v=_UWXqFBF86U

Jeśli używasz ObjectAnimator widok naprawdę zmienia swoją aktualną pozycję.

TłumaczAnimacja nie jest przestarzała, nadal można ją znaleźć na Lollipopie, ale w większości przypadków mogę polecić klasę o nazwie ViewPropertyAnimator, o której wiele osób wciąż nie wie, prawdopodobnie jest to najprostszy i najprostszy sposób na animuj widok, a także możesz zaoszczędzić sporo kodu. Oto przykład:

retractableLayout.animate() 
       .translationX(toX) 
       .translationY(toY) 
       .setDuration(duration) 
       .setInterpolator(interpolator) 
       .setStartDelay(startDelay); 

Można również ustawić słuchacza itp., Należy sprawdzić dostępne metody.

I sprawdź to naprawdę pomocne wideo:

https://www.youtube.com/watch?v=3UbJhmkeSig

+0

ViewPropertyAnimator jest niesamowity! Nigdy nie wiedziałem, że tam jest, okrzyki –

0

TranslateAnimation jest depracated ponieważ Android 3.0 i ObjectAnimator jest droga. Animator obiektów jest o wiele bardziej elastyczny, ponieważ pozwala "animować" dowolną właściwość obiektu, która ma wdrożony odpowiedni program ustawiający i pobierający. Sprawdzić Oficjalna Android instrukcji dev http://developer.android.com/guide/topics/graphics/overview.html

+0

natrafiliśmy glitch z 'ObjectAnimator' na OnePlus One (5.0.1):' animację TRANSLATION_X' przesuwać widok na ekranie od right 'ObectAnimator.ofFloat (view, View.TRANSLATION_X, view.getRootView(). getWidth(), 0)' wydaje się ominąć etap ** widoku ** layout, ale ' "działa jak urok. –

Powiązane problemy