【问题标题】:Android ObjectAnimation only started onceAndroid ObjectAnimation 只启动一次
【发布时间】:2011-03-15 20:03:02
【问题描述】:

我使用 ObjectAnimator API (android.animation.ObjectAnimator) 在按钮被点击后对其进行动画处理(v 是按钮):

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

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

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

提前致谢, 马丁

【问题讨论】:

  • 此代码在您的 Button 事件中?
  • @Marcos Vasconcelos 是的,它位于分配的 OnClickListener 的 onClick 方法中。我可以在调试器中看到代码实际上正在运行。虽然不确定框架做了什么,因为它说动画不会立即运行(但我认为是在另一个线程中)。

标签: android animation android-3.0-honeycomb


【解决方案1】:

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

ObjectAnimator.ofFloat(v, "rotationY", 0.0f, 360.0f)

【讨论】:

    【解决方案2】:

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

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

        animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                v.setRotationY(0);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2020-10-08
      • 2011-12-20
      • 2015-06-07
      • 2023-03-23
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多