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】:当您请求使用ViewPropertyAnimator
为x
字段设置动画时,它实际上并未为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的主要内容,如果未能解决你的问题,请参考以下文章
Android中属性动画2----ObjectAnimator监听的使用
Android objectAnimator animate backgroundColor of Layout