2015-03-20 2 views
5

Я просто делаю простой проект, где я пытаюсь показать/скрыть макет в верхней части LinearLayout с помощью TranslateAnimation. Было мерцание, потому что, когда я вызываю onAnimationEnd(), анимация не была завершена за 0,1 сек.ObjectAnimator vs TranslateAnimation

Пример:

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

Когда я ищу на StackOverflow, я обнаружил, что есть еще один способ сделать это. С ObjectAnimator. После его использования моя анимация была прекрасной без View.GONE

В чем разница между TranslateAnimation и ObjectAnimator? Является ли один из них устаревшим, и они делают то же самое, или есть время, когда тот или другой лучше.

Вот GitHub репо с 2-х вариантах (https://github.com/charlesvigneault/AAA_Test1)

Благодарности

ответ

13

Разница в том, что, если вы используете TranslateAnimation, вид, который вы анимации, на самом деле не оставляет свое исходное положение на экране, он просто заставляет его выглядеть так, будто он движется. Таким образом, представление в основном не меняет своих координат.

Проверьте это видео о Просмотр анимации: https://www.youtube.com/watch?v=_UWXqFBF86U

Если вы используете ObjectAnimator вид действительно изменяет свое фактическое положение.

TranslateAnimation не устарел, вы все равно можете найти его на Lollipop, но в большинстве случаев я могу порекомендовать класс под названием ViewPropertyAnimator, о котором многие люди все еще не знают, это, вероятно, самый простой и самый прямой способ анимировать представление, а также может сэкономить вам много кода. Вот пример:

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

Вы также можете установить приемник и т.д., не забудьте проверить доступные методы.

И проверить это действительно полезное видео:

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

+0

ViewPropertyAnimator - это потрясающе! Никогда не знал, что это было, приветствия –

0

TranslateAnimation является depracated поскольку Android 3.0 и ObjectAnimator это путь. Аниматор объектов намного более гибкий, поскольку он позволяет «анимировать» любое свойство объекта, которое имеет правильный набор и приемник. Проверьте официальное руководство разработчика android dev http://developer.android.com/guide/topics/graphics/overview.html

+0

Мы пришли через глюк с 'ObjectAnimator' на OnePlus One (5.0.1):' TRANSLATION_X' анимация слайд вид на экран из right 'ObectAnimator.ofFloat (view, View.TRANSLATION_X, view.getRootView(). getWidth(), 0)', похоже, пропускает этап ** просмотра ** макета, но ' 'работает как шарм. –

Смежные вопросы