Подтвердить что ты не робот

Возвращение анимации с помощью AnimatorSet

Я создаю анимацию с AnimatorSet, и когда она заканчивается, я хотел бы оставить View там, где она была.

Код выглядит примерно так:

mLastAnimation = new AnimatorSet();
mLastAnimation.playTogether(
  ObjectAnimator.ofFloat(mImageView, "scaleX", 1.5f, 1f),
  ObjectAnimator.ofFloat(mImageView, "translationY", 40f, 0f));
mLastAnimation.setDuration(3000);
mLastAnimation.addListener(this);
mLastAnimation.start();

// The Activity implements the AnimatorListener interface
  @Override
  public void onAnimationEnd(Animator animator) {
    // Undo the animation changes to the view.
  }

EDIT:

Я использую новый API анимации, поэтому setFillAfter() здесь не работает.

4b9b3361

Ответ 1

Вы должны вернуть свойствам View к его исходным значениям.

Например, если вы переводите 40 пикселей вперед, вам нужно перевести 40 пикселей назад. Это связано с тем, что фактические свойства View изменились во время анимации свойств, а не только на то, как она визуализируется.

http://developer.android.com/guide/topics/graphics/prop-animation.html#property-vs-view

Ответ 2

Если вы используете 9oldandroids, существует функция с именем reverse. Вы можете установить продолжительность равным 0 и вызвать reverse, чтобы отменить анимацию.

Ответ 3

Вы можете использовать это:

ObjectAnimator scaleX = ObjectAnimator.ofFloat(mImageView, "scaleX", 1.5f, 1f);
// here is the important part!
scaleX.setRepeatMode(ValueAnimator.REVERSE);
scaleX.setRepeatCount(1);
ObjectAnimator transl = ObjectAnimator.ofFloat(mImageView, "translationY", 40f, 0f));
// here is the important part!
transl.setRepeatMode(ValueAnimator.REVERSE);
transl.setRepeatCount(1);

mLastAnimation = new AnimatorSet();
mLastAnimation.playTogether(scaleX, transl);
// the rest is the same...

Ответ 4

При использовании ObjectAnimator вы можете просто установить

android:repeatMode="reverse"