安卓ObjectAnimator与ViewPropertyAnimator的区别

6
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);

然而,当我在上述ViewPropertyAnimator进行时使用myObject.getX()时,我得到了精确的100.0。

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

提前感谢。

1个回答

5
当您使用ViewPropertyAnimator请求动画x字段时,实际上并没有对x字段进行动画处理 - 它会对translateX字段进行动画处理。这就是为什么您无法看到x字段的更改。
从Android的源代码中可以看出,在文件中:
case X:
    renderNode.setTranslationX(value - mView.mLeft);
    break;

ObjectAnimator 与其他动画不同,它使用反射来对属性进行动画处理,而不是预设的支持列表。因此,当您要求它动画处理 "X" 字段时,它会直接调用 "setX" 方法。


ViewPropertyAnimator.translationX()是什么意思? 这是否意味着ViewPropertyAnimator.x()和translationX()实际上是相同的? - Hwang
1
translationX也会影响到translationX,但不会通过视图的mLeft值进行补偿。 - Gil Moshayof
1
我觉得这个答案不正确。你有参考资料吗? - black
是的,Android源代码(请参见setValue(int,float)方法):https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/ViewPropertyAnimator.java - Gil Moshayof
使用ViewPropertyAnimator.x()怎么样?这将与视图的实际位置一起播放。 - CopsOnRoad
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接