Android ObjectAnimator vs ViewPropertyAnimator

3.3k Views Asked by At

What's the difference between ObjectAnimator and ViewPropertyAnimator changing property value?

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

I tried myObject.getX() while above objectAnimator is ongoing, and I got a on-the-way value between 0.0f to 100.0.

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

However, I got precise 100.0 when I myObject.getX()'d while above ViewPropertyAnimator is ongoing.

I can't figure out what makes this difference.

Thanks in advance.

1

There are 1 best solutions below

7
Gil Moshayof On BEST ANSWER

When you request to animate the x field using a ViewPropertyAnimator, it doesn't actually animate the x field - it animates the translateX field. This is why you can't see the x field change.

From the Android source code in ViewPropertyAnimator.java:

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

ObjectAnimator on the other hand uses reflection to animate properties - rather than a preset list of supported actions. And so when you tell it to animate the "X" field, it calls "setX" directly.