58

I am starting to play around with Property Animations over view animations as I have a view that needs to scale and push others out of the way as it does. I've seen some examples but I'm just wondering if there is anywhere that provides a list of the properties that can be altered using these classes. For example, I saw one tutorial that did a quick rotation using:

ObjectAnimator.ofFloat(aniView, "rotation", 360)

Which is quite cool, but I wouldn't have known the rotation property if not for that exact tutorial, is there any comprehensive list of what can be done? The particular property I want to animate is the weight of a view within a LinearLayout, if anyone has any advice on that specifically.

Jonik
  • 74,291
  • 66
  • 249
  • 356
Cathal Comerford
  • 980
  • 1
  • 8
  • 12

4 Answers4

63

Better late than never, so here is the comprehensive list of the properties that can be animated with ObjectAnimator.

http://developer.android.com/guide/topics/graphics/prop-animation.html#views

Onyx
  • 3,599
  • 1
  • 19
  • 8
  • 1
    I am curious if that is the complete list? On 9OldAndroid, there is an example that animates the background color of a view, which is not specified in the list. http://nineoldandroids.com/ `ObjectAnimator.ofInt(this, "backgroundColor", /*Red*/0xFFFF8080, /*Blue*/0xFF8080FF);` – Some Noob Student Jun 19 '14 at 22:39
  • 4
    The list is not complete, there's at list "xFraction" and "yFraction" that works (saw in [DevBytes Sliding Fragments sample](https://www.youtube.com/watch?v=xbl5cxfA1n4)) – Matthieu Harlé Sep 17 '14 at 19:22
  • 7
    A complete list won't exist given that it works with anything that has a properly name getter/setter (reflection), or by defining a custom Property. See http://stackoverflow.com/a/28381280/1290264. – bcorso Oct 29 '15 at 16:08
  • 2
    This list isn't even remotely comprehensive since it can be used on any accessible object with any accessible setter. – Jason Hartley Jul 19 '16 at 16:03
28

The Docs imply that any value can be used with ObjectAnimator as long as you follow a naming convention:

  1. The object property that you are animating must have a setter function (in camel case) in the form of set<propertyName>(). Because the ObjectAnimator automatically updates the property during animation, it must be able to access the property with this setter method. For example, if the property name is foo, you need to have a setFoo() method. If this setter method does not exist, you have three options:
    • Add the setter method to the class if you have the rights to do so.
    • Use a wrapper class that you have rights to change and have that wrapper receive the value with a valid setter method and forward it to the original object.
    • Use ValueAnimator instead.
  2. [...]

With respect to your question, View has the method setRotation(float) -- that gives you a hint it can be used. In particular here's how you would do it with a particular TimeInterpolator:

ObjectAnimator anim = ObjectAnimator.ofFloat(myView, "rotation", 0f, 90f);
anim.setDuration(2000);                  // Duration in milliseconds
anim.setInterpolator(timeInterpolator);  // E.g. Linear, Accelerate, Decelerate
anim.start()                             // Begin the animation

You can read the docs for more details on the expectations of ObjectAnimator.

bcorso
  • 40,568
  • 8
  • 56
  • 73
25

Here is the comprehensive list of property names that you are looking for:

  • rotation
  • rotationX
  • rotationY
  • translationX
  • translationY
  • scaleX
  • scaleY
  • pivotX
  • pivotY
  • alpha
  • x
  • y

Source: Docs

Sagar
  • 2,480
  • 2
  • 24
  • 34
0

Use "translateX" or "transalteY" to move a <group> Take a look at vectorDrawable