Android ObjectAnimator 与 ViewPropertyAnimator
Android ObjectAnimator vs ViewPropertyAnimator
ObjectAnimator 和 ViewPropertyAnimator 改变 属性 值有什么区别?
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(myObject, "X", 0.0f, 100.0f);
我尝试了 myObject.getX()
而上面的 objectAnimator
正在进行中,我得到了一个介于 0.0f 到 100.0 之间的途中值。
myObject.setX(0.0f);
myObject.animate().x(100.0f);
但是,当我在 ViewPropertyAnimator
以上 myObject.getX()
进行时,我得到了精确的 100.0。
我不知道是什么造成了这种差异。
提前致谢。
当您请求使用 ViewPropertyAnimator
为 x
字段设置动画时,它实际上并没有为 x
字段设置动画 - 它为 translateX
字段设置了动画。这就是为什么您看不到 x
字段更改的原因。
来自 ViewPropertyAnimator.java 中的 Android 源代码:
case X:
renderNode.setTranslationX(value - mView.mLeft);
break;
另一方面,ObjectAnimator
使用反射来动画属性 - 而不是支持操作的预设列表。因此,当您告诉它为“X
”字段设置动画时,它会直接调用“setX
”。
ObjectAnimator 和 ViewPropertyAnimator 改变 属性 值有什么区别?
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(myObject, "X", 0.0f, 100.0f);
我尝试了 myObject.getX()
而上面的 objectAnimator
正在进行中,我得到了一个介于 0.0f 到 100.0 之间的途中值。
myObject.setX(0.0f);
myObject.animate().x(100.0f);
但是,当我在 ViewPropertyAnimator
以上 myObject.getX()
进行时,我得到了精确的 100.0。
我不知道是什么造成了这种差异。
提前致谢。
当您请求使用 ViewPropertyAnimator
为 x
字段设置动画时,它实际上并没有为 x
字段设置动画 - 它为 translateX
字段设置了动画。这就是为什么您看不到 x
字段更改的原因。
来自 ViewPropertyAnimator.java 中的 Android 源代码:
case X:
renderNode.setTranslationX(value - mView.mLeft);
break;
另一方面,ObjectAnimator
使用反射来动画属性 - 而不是支持操作的预设列表。因此,当您告诉它为“X
”字段设置动画时,它会直接调用“setX
”。