【问题标题】:Android ObjectAnimator vs ViewPropertyAnimatorAndroid ObjectAnimator 与 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。

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

提前致谢。

【问题讨论】:

    标签: java android objectanimator animator viewpropertyanimator


    【解决方案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() 怎么样?这将使用视图的实际位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多