Возвращение анимации с помощью 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()
здесь не работает.
Ответы
Ответ 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"