我正在使用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()
无效。
答案 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"