4

我使用 ObjectAnimator API (android.animation.ObjectAnimator) 在按钮被点击后为其设置动画(v 是按钮):

ObjectAnimator animator = ObjectAnimator.ofFloat(v, "rotationY", 360f);
animator.setDuration(5000);
animator.start();

当我在模拟器上测试它时,它适用于第一次点击(按钮旋转)。但是当我再次单击按钮时(第一次单击后片段没有被破坏等),我在模拟器上看不到任何动画(模拟器不是最快的,但 5 秒后我应该看到一些东西)。

我需要在第一个动画之后销毁/关闭某些东西还是我错过了什么?有没有人有提示或可以重现这个?

在此先感谢,马丁

4

2 回答 2

12

第二次您将尝试从 360.0f 动画到 360.0f。将您对 ofFloat() 的调用更改为:

ObjectAnimator.ofFloat(v, "rotationY", 0.0f, 360.0f)
于 2011-03-15T20:14:00.670 回答
9

为了详细说明 Romain 的答案,单值工厂构造函数的结果是动画,它将从当前值运行到参数中指定的值。在您的情况下,该对象的值为 0,以动画(第一次)开始,值为 360。第二次运行时,它从当前值(360)动画到指定值(360)。动画不多。

修复方法如上:对动画师的开始值和结束值进行硬编码。或者,您可以通过实现 AnimatorListener.onAnimationEnd 方法在动画结束时将值重置为 0,并在动画结束时将其重置:

    animator.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            v.setRotationY(0);
        }
    });
于 2011-04-04T20:45:41.817 回答