com.nineoldandroids.animation
Class ValueAnimator

java.lang.Object
  extended by com.nineoldandroids.animation.Animator
      extended by com.nineoldandroids.animation.ValueAnimator
All Implemented Interfaces:
Cloneable
Direct Known Subclasses:
ObjectAnimator, TimeAnimator

public class ValueAnimator
extends Animator

This class provides a simple timing engine for running animations which calculate animated values and set them on target objects.

There is a single timing pulse that all animations use. It runs in a custom handler to ensure that property changes happen on the UI thread.

By default, ValueAnimator uses non-linear time interpolation, via the AccelerateDecelerateInterpolator class, which accelerates into and decelerates out of an animation. This behavior can be changed by calling ValueAnimator#setInterpolator(TimeInterpolator).


Nested Class Summary
static interface ValueAnimator.AnimatorUpdateListener
          Implementors of this interface can add themselves as update listeners to an ValueAnimator instance to receive callbacks on every animation frame, after the current frame's values have been calculated for that ValueAnimator.
 
Nested classes/interfaces inherited from class com.nineoldandroids.animation.Animator
Animator.AnimatorListener
 
Field Summary
static int INFINITE
          This value used used with the setRepeatCount(int) property to repeat the animation indefinitely.
static int RESTART
          When the animation reaches the end and repeatCount is INFINITE or a positive value, the animation restarts from the beginning.
static int REVERSE
          When the animation reaches the end and repeatCount is INFINITE or a positive value, the animation reverses direction on every iteration.
 
Constructor Summary
ValueAnimator()
          Creates a new ValueAnimator object.
 
Method Summary
 void addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)
          Adds a listener to the set of listeners that are sent update events through the life of an animation.
 void cancel()
          Cancels the animation.
static void clearAllAnimations()
          Clear all animations on this thread, without canceling or ending them.
 ValueAnimator clone()
           
 void end()
          Ends the animation.
 float getAnimatedFraction()
          Returns the current animation fraction, which is the elapsed/interpolated fraction used in the most recent frame update on the animation.
 Object getAnimatedValue()
          The most recent value calculated by this ValueAnimator when there is just one property being animated.
 Object getAnimatedValue(String propertyName)
          The most recent value calculated by this ValueAnimator for propertyName.
static int getCurrentAnimationsCount()
          Return the number of animations currently running.
 long getCurrentPlayTime()
          Gets the current position of the animation in time, which is equal to the current time minus the time that the animation started.
 long getDuration()
          Gets the length of the animation.
static long getFrameDelay()
          The amount of time, in milliseconds, between each frame of the animation.
 Interpolator getInterpolator()
          Returns the timing interpolator that this ValueAnimator uses.
 int getRepeatCount()
          Defines how many times the animation should repeat.
 int getRepeatMode()
          Defines what this animation should do when it reaches the end.
 long getStartDelay()
          The amount of time, in milliseconds, to delay starting the animation after start() is called.
 PropertyValuesHolder[] getValues()
          Returns the values that this ValueAnimator animates between.
 boolean isRunning()
          Returns whether this Animator is currently running (having been started and gone past any initial startDelay period and not yet ended).
 boolean isStarted()
          Returns whether this Animator has been started and not yet ended.
static ValueAnimator ofFloat(float... values)
          Constructs and returns a ValueAnimator that animates between float values.
static ValueAnimator ofInt(int... values)
          Constructs and returns a ValueAnimator that animates between int values.
static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values)
          Constructs and returns a ValueAnimator that animates between Object values.
static ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values)
          Constructs and returns a ValueAnimator that animates between the values specified in the PropertyValuesHolder objects.
 void removeAllUpdateListeners()
          Removes all listeners from the set listening to frame updates for this animation.
 void removeUpdateListener(ValueAnimator.AnimatorUpdateListener listener)
          Removes a listener from the set listening to frame updates for this animation.
 void reverse()
          Plays the ValueAnimator in reverse.
 void setCurrentPlayTime(long playTime)
          Sets the position of the animation to the specified point in time.
 ValueAnimator setDuration(long duration)
          Sets the length of the animation.
 void setEvaluator(TypeEvaluator value)
          The type evaluator to be used when calculating the animated values of this animation.
 void setFloatValues(float... values)
          Sets float values that will be animated between.
static void setFrameDelay(long frameDelay)
          The amount of time, in milliseconds, between each frame of the animation.
 void setInterpolator(Interpolator value)
          The time interpolator used in calculating the elapsed fraction of this animation.
 void setIntValues(int... values)
          Sets int values that will be animated between.
 void setObjectValues(Object... values)
          Sets the values to animate between for this animation.
 void setRepeatCount(int value)
          Sets how many times the animation should be repeated.
 void setRepeatMode(int value)
          Defines what this animation should do when it reaches the end.
 void setStartDelay(long startDelay)
          The amount of time, in milliseconds, to delay starting the animation after start() is called.
 void setValues(PropertyValuesHolder... values)
          Sets the values, per property, being animated between.
 void start()
          Starts this animation.
 String toString()
           
 
Methods inherited from class com.nineoldandroids.animation.Animator
addListener, getListeners, removeAllListeners, removeListener, setTarget, setupEndValues, setupStartValues
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

RESTART

public static final int RESTART
When the animation reaches the end and repeatCount is INFINITE or a positive value, the animation restarts from the beginning.

See Also:
Constant Field Values

REVERSE

public static final int REVERSE
When the animation reaches the end and repeatCount is INFINITE or a positive value, the animation reverses direction on every iteration.

See Also:
Constant Field Values

INFINITE

public static final int INFINITE
This value used used with the setRepeatCount(int) property to repeat the animation indefinitely.

See Also:
Constant Field Values
Constructor Detail

ValueAnimator

public ValueAnimator()
Creates a new ValueAnimator object. This default constructor is primarily for use internally; the factory methods which take parameters are more generally useful.

Method Detail

ofInt

public static ValueAnimator ofInt(int... values)
Constructs and returns a ValueAnimator that animates between int values. A single value implies that that value is the one being animated to. However, this is not typically useful in a ValueAnimator object because there is no way for the object to determine the starting value for the animation (unlike ObjectAnimator, which can derive that value from the target object and property being animated). Therefore, there should typically be two or more values.

Parameters:
values - A set of values that the animation will animate between over time.
Returns:
A ValueAnimator object that is set up to animate between the given values.

ofFloat

public static ValueAnimator ofFloat(float... values)
Constructs and returns a ValueAnimator that animates between float values. A single value implies that that value is the one being animated to. However, this is not typically useful in a ValueAnimator object because there is no way for the object to determine the starting value for the animation (unlike ObjectAnimator, which can derive that value from the target object and property being animated). Therefore, there should typically be two or more values.

Parameters:
values - A set of values that the animation will animate between over time.
Returns:
A ValueAnimator object that is set up to animate between the given values.

ofPropertyValuesHolder

public static ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values)
Constructs and returns a ValueAnimator that animates between the values specified in the PropertyValuesHolder objects.

Parameters:
values - A set of PropertyValuesHolder objects whose values will be animated between over time.
Returns:
A ValueAnimator object that is set up to animate between the given values.

ofObject

public static ValueAnimator ofObject(TypeEvaluator evaluator,
                                     Object... values)
Constructs and returns a ValueAnimator that animates between Object values. A single value implies that that value is the one being animated to. However, this is not typically useful in a ValueAnimator object because there is no way for the object to determine the starting value for the animation (unlike ObjectAnimator, which can derive that value from the target object and property being animated). Therefore, there should typically be two or more values.

Since ValueAnimator does not know how to animate between arbitrary Objects, this factory method also takes a TypeEvaluator object that the ValueAnimator will use to perform that interpolation.

Parameters:
evaluator - A TypeEvaluator that will be called on each animation frame to provide the ncessry interpolation between the Object values to derive the animated value.
values - A set of values that the animation will animate between over time.
Returns:
A ValueAnimator object that is set up to animate between the given values.

setIntValues

public void setIntValues(int... values)
Sets int values that will be animated between. A single value implies that that value is the one being animated to. However, this is not typically useful in a ValueAnimator object because there is no way for the object to determine the starting value for the animation (unlike ObjectAnimator, which can derive that value from the target object and property being animated). Therefore, there should typically be two or more values.

If there are already multiple sets of values defined for this ValueAnimator via more than one PropertyValuesHolder object, this method will set the values for the first of those objects.

Parameters:
values - A set of values that the animation will animate between over time.

setFloatValues

public void setFloatValues(float... values)
Sets float values that will be animated between. A single value implies that that value is the one being animated to. However, this is not typically useful in a ValueAnimator object because there is no way for the object to determine the starting value for the animation (unlike ObjectAnimator, which can derive that value from the target object and property being animated). Therefore, there should typically be two or more values.

If there are already multiple sets of values defined for this ValueAnimator via more than one PropertyValuesHolder object, this method will set the values for the first of those objects.

Parameters:
values - A set of values that the animation will animate between over time.

setObjectValues

public void setObjectValues(Object... values)
Sets the values to animate between for this animation. A single value implies that that value is the one being animated to. However, this is not typically useful in a ValueAnimator object because there is no way for the object to determine the starting value for the animation (unlike ObjectAnimator, which can derive that value from the target object and property being animated). Therefore, there should typically be two or more values.

If there are already multiple sets of values defined for this ValueAnimator via more than one PropertyValuesHolder object, this method will set the values for the first of those objects.

There should be a TypeEvaluator set on the ValueAnimator that knows how to interpolate between these value objects. ValueAnimator only knows how to interpolate between the primitive types specified in the other setValues() methods.

Parameters:
values - The set of values to animate between.

setValues

public void setValues(PropertyValuesHolder... values)
Sets the values, per property, being animated between. This function is called internally by the constructors of ValueAnimator that take a list of values. But an ValueAnimator can be constructed without values and this method can be called to set the values manually instead.

Parameters:
values - The set of values, per property, being animated between.

getValues

public PropertyValuesHolder[] getValues()
Returns the values that this ValueAnimator animates between. These values are stored in PropertyValuesHolder objects, even if the ValueAnimator was created with a simple list of value objects instead.

Returns:
PropertyValuesHolder[] An array of PropertyValuesHolder objects which hold the values, per property, that define the animation.

setDuration

public ValueAnimator setDuration(long duration)
Sets the length of the animation. The default duration is 300 milliseconds.

Specified by:
setDuration in class Animator
Parameters:
duration - The length of the animation, in milliseconds. This value cannot be negative.
Returns:
ValueAnimator The object called with setDuration(). This return value makes it easier to compose statements together that construct and then set the duration, as in ValueAnimator.ofInt(0, 10).setDuration(500).start().

getDuration

public long getDuration()
Gets the length of the animation. The default duration is 300 milliseconds.

Specified by:
getDuration in class Animator
Returns:
The length of the animation, in milliseconds.

setCurrentPlayTime

public void setCurrentPlayTime(long playTime)
Sets the position of the animation to the specified point in time. This time should be between 0 and the total duration of the animation, including any repetition. If the animation has not yet been started, then it will not advance forward after it is set to this time; it will simply set the time to this value and perform any appropriate actions based on that time. If the animation is already running, then setCurrentPlayTime() will set the current playing time to this value and continue playing from that point.

Parameters:
playTime - The time, in milliseconds, to which the animation is advanced or rewound.

getCurrentPlayTime

public long getCurrentPlayTime()
Gets the current position of the animation in time, which is equal to the current time minus the time that the animation started. An animation that is not yet started will return a value of zero.

Returns:
The current position in time of the animation.

getStartDelay

public long getStartDelay()
The amount of time, in milliseconds, to delay starting the animation after start() is called.

Specified by:
getStartDelay in class Animator
Returns:
the number of milliseconds to delay running the animation

setStartDelay

public void setStartDelay(long startDelay)
The amount of time, in milliseconds, to delay starting the animation after start() is called.

Specified by:
setStartDelay in class Animator
Parameters:
startDelay - The amount of the delay, in milliseconds

getFrameDelay

public static long getFrameDelay()
The amount of time, in milliseconds, between each frame of the animation. This is a requested time that the animation will attempt to honor, but the actual delay between frames may be different, depending on system load and capabilities. This is a static function because the same delay will be applied to all animations, since they are all run off of a single timing loop.

Returns:
the requested time between frames, in milliseconds

setFrameDelay

public static void setFrameDelay(long frameDelay)
The amount of time, in milliseconds, between each frame of the animation. This is a requested time that the animation will attempt to honor, but the actual delay between frames may be different, depending on system load and capabilities. This is a static function because the same delay will be applied to all animations, since they are all run off of a single timing loop.

Parameters:
frameDelay - the requested time between frames, in milliseconds

getAnimatedValue

public Object getAnimatedValue()
The most recent value calculated by this ValueAnimator when there is just one property being animated. This value is only sensible while the animation is running. The main purpose for this read-only property is to retrieve the value from the ValueAnimator during a call to ValueAnimator.AnimatorUpdateListener.onAnimationUpdate(ValueAnimator), which is called during each animation frame, immediately after the value is calculated.

Returns:
animatedValue The value most recently calculated by this ValueAnimator for the single property being animated. If there are several properties being animated (specified by several PropertyValuesHolder objects in the constructor), this function returns the animated value for the first of those objects.

getAnimatedValue

public Object getAnimatedValue(String propertyName)
The most recent value calculated by this ValueAnimator for propertyName. The main purpose for this read-only property is to retrieve the value from the ValueAnimator during a call to ValueAnimator.AnimatorUpdateListener.onAnimationUpdate(ValueAnimator), which is called during each animation frame, immediately after the value is calculated.

Returns:
animatedValue The value most recently calculated for the named property by this ValueAnimator.

setRepeatCount

public void setRepeatCount(int value)
Sets how many times the animation should be repeated. If the repeat count is 0, the animation is never repeated. If the repeat count is greater than 0 or INFINITE, the repeat mode will be taken into account. The repeat count is 0 by default.

Parameters:
value - the number of times the animation should be repeated

getRepeatCount

public int getRepeatCount()
Defines how many times the animation should repeat. The default value is 0.

Returns:
the number of times the animation should repeat, or INFINITE

setRepeatMode

public void setRepeatMode(int value)
Defines what this animation should do when it reaches the end. This setting is applied only when the repeat count is either greater than 0 or INFINITE. Defaults to RESTART.

Parameters:
value - RESTART or REVERSE

getRepeatMode

public int getRepeatMode()
Defines what this animation should do when it reaches the end.

Returns:
either one of REVERSE or RESTART

addUpdateListener

public void addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)
Adds a listener to the set of listeners that are sent update events through the life of an animation. This method is called on all listeners for every frame of the animation, after the values for the animation have been calculated.

Parameters:
listener - the listener to be added to the current set of listeners for this animation.

removeAllUpdateListeners

public void removeAllUpdateListeners()
Removes all listeners from the set listening to frame updates for this animation.


removeUpdateListener

public void removeUpdateListener(ValueAnimator.AnimatorUpdateListener listener)
Removes a listener from the set listening to frame updates for this animation.

Parameters:
listener - the listener to be removed from the current set of update listeners for this animation.

setInterpolator

public void setInterpolator(Interpolator value)
The time interpolator used in calculating the elapsed fraction of this animation. The interpolator determines whether the animation runs with linear or non-linear motion, such as acceleration and deceleration. The default value is AccelerateDecelerateInterpolator

Specified by:
setInterpolator in class Animator
Parameters:
value - the interpolator to be used by this animation. A value of null will result in linear interpolation.

getInterpolator

public Interpolator getInterpolator()
Returns the timing interpolator that this ValueAnimator uses.

Returns:
The timing interpolator for this ValueAnimator.

setEvaluator

public void setEvaluator(TypeEvaluator value)
The type evaluator to be used when calculating the animated values of this animation. The system will automatically assign a float or int evaluator based on the type of startValue and endValue in the constructor. But if these values are not one of these primitive types, or if different evaluation is desired (such as is necessary with int values that represent colors), a custom evaluator needs to be assigned. For example, when running an animation on color values, the ArgbEvaluator should be used to get correct RGB color interpolation.

If this ValueAnimator has only one set of values being animated between, this evaluator will be used for that set. If there are several sets of values being animated, which is the case if PropertyValuesHOlder objects were set on the ValueAnimator, then the evaluator is assigned just to the first PropertyValuesHolder object.

Parameters:
value - the evaluator to be used this animation

start

public void start()
Description copied from class: Animator
Starts this animation. If the animation has a nonzero startDelay, the animation will start running after that delay elapses. A non-delayed animation will have its initial value(s) set immediately, followed by calls to Animator.AnimatorListener.onAnimationStart(Animator) for any listeners of this animator.

The animation started by calling this method will be run on the thread that called this method. This thread should have a Looper on it (a runtime exception will be thrown if this is not the case). Also, if the animation will animate properties of objects in the view hierarchy, then the calling thread should be the UI thread for that view hierarchy.

Overrides:
start in class Animator

cancel

public void cancel()
Description copied from class: Animator
Cancels the animation. Unlike Animator.end(), cancel() causes the animation to stop in its tracks, sending an Animator.AnimatorListener to its listeners, followed by an Animator.AnimatorListener message.

This method must be called on the thread that is running the animation.

Overrides:
cancel in class Animator

end

public void end()
Description copied from class: Animator
Ends the animation. This causes the animation to assign the end value of the property being animated, then calling the Animator.AnimatorListener method on its listeners.

This method must be called on the thread that is running the animation.

Overrides:
end in class Animator

isRunning

public boolean isRunning()
Description copied from class: Animator
Returns whether this Animator is currently running (having been started and gone past any initial startDelay period and not yet ended).

Specified by:
isRunning in class Animator
Returns:
Whether the Animator is running.

isStarted

public boolean isStarted()
Description copied from class: Animator
Returns whether this Animator has been started and not yet ended. This state is a superset of the state of Animator.isRunning(), because an Animator with a nonzero startDelay will return true for Animator.isStarted() during the delay phase, whereas Animator.isRunning() will return true only after the delay phase is complete.

Overrides:
isStarted in class Animator
Returns:
Whether the Animator has been started and not yet ended.

reverse

public void reverse()
Plays the ValueAnimator in reverse. If the animation is already running, it will stop itself and play backwards from the point reached when reverse was called. If the animation is not currently running, then it will start from the end and play backwards. This behavior is only set for the current animation; future playing of the animation will use the default behavior of playing forward.


getAnimatedFraction

public float getAnimatedFraction()
Returns the current animation fraction, which is the elapsed/interpolated fraction used in the most recent frame update on the animation.

Returns:
Elapsed/interpolated fraction of the animation.

clone

public ValueAnimator clone()
Overrides:
clone in class Animator

getCurrentAnimationsCount

public static int getCurrentAnimationsCount()
Return the number of animations currently running. Used by StrictMode internally to annotate violations. Only called on the main thread.


clearAllAnimations

public static void clearAllAnimations()
Clear all animations on this thread, without canceling or ending them. This should be used with caution.


toString

public String toString()
Overrides:
toString in class Object