我使用ObjectAnimator API(android.animation.ObjectAnimator)在点击按钮时为其设置动画(v是按钮):
ObjectAnimator animator = ObjectAnimator.ofFloat(v, "rotationY", 360f);
animator.setDuration(5000);
animator.start();
当我在模拟器上测试它时,它适用于第一次单击(按钮旋转)。但是当我再次单击该按钮(片段在第一次点击后没有被破坏等)时,我在模拟器上看不到任何动画(模拟器不是最快的,但有5秒我应该看到的东西)。
我是否需要在第一个动画之后销毁/关闭某些内容或者我缺少什么? 有人有提示或可以重现吗?
提前致谢, 马丁
答案 0 :(得分:12)
第二次尝试从360.0f动画到360.0f。将您对ofFloat()的调用更改为:
ObjectAnimator.ofFloat(v, "rotationY", 0.0f, 360.0f)
答案 1 :(得分:9)
要详细说明Romain的答案,单值工厂构造函数的结果是动画,它将从当前值到参数中指定的值运行。在您的情况下,对象的值为0,以动画(第一次)开始,值为360.第二次运行时,它从当前值(360)动画到指定值(360)。没什么动画。
修复如上:硬编码动画师的开始值和结束值。或者,您可以在动画完成时通过实现AnimatorListener.onAnimationEnd方法将值重置为0,并在动画结束时重置它:
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
v.setRotationY(0);
}
});