2015-12-24 2 views
0

У меня есть простая визитная карточка cardview и вы хотите перевести ее из центра макета в правую сторону и обратно в исходное место. Написал код с помощью объекта аниматор:Объект-аниматор с использованием старой позиции зрения

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(topCard, "translationX", topCard.getWidth() + 150); 
    objectAnimator.setDuration(1500); 
    objectAnimator.start(); 
    objectAnimator.addListener(new Animator.AnimatorListener() { 
    @Override 
public void onAnimationEnd(Animator animation) { 
    ObjectAnimator translationX = ObjectAnimator.ofFloat(topCard, "translationX", - (topCard.getWidth() + 150)); 
    translationX.setDuration(1500); 
    translationX.start(); 

Таким образом, на мой взгляд правильно переводится на правую сторону, а вторая анимация двигаться не к месту старта, а к (start place - (topCard.getWidth() + 150)).

Как я могу анимировать перевод вправо и назад в ту же позицию, используя 2 анимации последовательности? Вот неправильный результат, что у меня есть https://i.imgur.com/8SShfHL.gifv

ответ

1

Вы должны попытаться положить это в onAnimationEnd вместо: что я добавил topCard.getWidth() + 150, что делает

@Override 
public void onAnimationEnd(Animator animation) { 
    ObjectAnimator translationX = ObjectAnimator.ofFloat(topCard, "translationX", 
      topCard.getWidth() + 150, - (topCard.getWidth() + 150)); 
    translationX.setDuration(1500); 
    translationX.start(); 

Обратите внимание, что исходное положение topCard. Согласно ObjectAnimator.ofFloat Android Docs:

Создает и возвращает ObjectAnimator, который анимируется между значениями поплавка. Одно значение означает, что это значение является анимированным. Два значения означают начальные и конечные значения.

+0

Да, я тоже попробовал этот случай, а результат тот же - https://i.imgur.com/8SShfHL.gifv карта не перемещается в ее исходное место – onCreate

+0

Ммм, попробуйте положить '0 'intead of' - (topCard.getWidth() + 150) 'тогда, например:' ObjectAnimator translationX = ObjectAnimator.ofFloat (topCard, "translationX", topCard.getWidth() + 150, 0); '. Я предполагаю, что аниматор берет исходное положение для справки, когда передал ему эти значения. –

+0

Скажите, если это сработает, и я обновлю свой ответ. –

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