Android ObjectAnimator 与 ViewPropertyAnimator

Posted

技术标签:

【中文标题】Android ObjectAnimator 与 ViewPropertyAnimator【英文标题】:Android ObjectAnimator vs ViewPropertyAnimator 【发布时间】:2016-11-07 09:39:20 【问题描述】:

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

但是,当我 myObject.getX()'d 而在 ViewPropertyAnimator 以上进行时,我得到了精确的 100.0。

我不知道是什么造成了这种差异。

提前致谢。

【问题讨论】:

【参考方案1】:

当您请求使用ViewPropertyAnimatorx 字段设置动画时,它实际上并未为x 字段设置动画,而是为translateX 字段设置动画。这就是您看不到 x 字段更改的原因。

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

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

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

【讨论】:

ViewPropertyAnimator.translationX() 怎么样?这是否意味着 ViewPropertyAnimator.x() 和 translationX() 实际上是相同的? translationX 也会影响 translationX,只是没有补偿视图的 mLeft 值。 我认为这个答案不正确。你有什么参考吗? 是的,android源码(见方法setValue(int, float)):github.com/android/platform_frameworks_base/blob/master/core/… 使用 ViewPropertyAnimator.x() 怎么样?这将使用视图的实际位置。

以上是关于Android ObjectAnimator 与 ViewPropertyAnimator的主要内容,如果未能解决你的问题,请参考以下文章

ObjectAnimator 重复循环延迟

Android中属性动画2----ObjectAnimator监听的使用

java #android #objectAnimator

Android objectAnimator animate backgroundColor of Layout

android.animation - PropertyValuesHolder与Keyframe(转)

Android - 在同一个 XML 文件上制作翻译和 objectAnimator