Android ObjectAnimator与ViewPropertyAnimator

ObjectAnimator和ViewPropertyAnimator改变属性值有什么区别?

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(myObject, "X", 0.0f, 100.0f); 

objectAnimator正在进行时,我尝试了myObject.getX() ,并且我在0.0f到100.0之间获得了一个在路上的值。

 myObject.setX(0.0f); myObject.animate().x(100.0f); 

但是,当myObject.getX() ‘在ViewPropertyAnimator上方正在进行时,我得到精确的100.0。

我无法弄清楚是什么造成了这种差异。

提前致谢。

当您请求使用ViewPropertyAnimatorx字段设置animation时,它实际上不会为x字段设置animation – 它会为translateX字段设置animation。 这就是为什么你看不到x字段的变化。

来自ViewPropertyAnimator.java中的Android源代码:

 case X: renderNode.setTranslationX(value - mView.mLeft); break; 

另一方面, ObjectAnimator使用reflection来animation属性 – 而不是预设的支持动作列表。 因此,当您告诉它为“ X ”字段设置animation时,它会直接调用“ setX ”。