恢复使用AnimatorSet完成的动画

时间:2012-07-26 13:48:03

标签: android android-animation

我正在使用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.
  }

编辑:

我正在使用新动画API,因此setFillAfter()无效。

4 个答案:

答案 0 :(得分:5)

您必须将View的属性设置回其原始值。

例如,如果向前翻译Y 40像素,则需要向后翻译40个像素。这是因为View的实际属性属性动画期间发生了变化,而不仅仅是渲染方式。

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

答案 1 :(得分:5)

如果您使用的是九个机器人,则会有一个名为reverse的函数。您可以将持续时间设置为0并调用reverse以反转动画。

答案 2 :(得分:2)

您可以使用:

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...

答案 3 :(得分:2)

使用ObjectAnimator时,您只需设置

即可
android:repeatMode="reverse"