ValueAnimator
public class ValueAnimator extends Animator
ObjectAnimator |
This subclass of |
TimeAnimator |
This class provides a simple callback mechanism to listeners that is synchronized with all other animators in the system. |
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 setInterpolator.
Animators can be created from either code or resource files. Here is an example of a ValueAnimator resource file:
ValueAnimator also supports the use of a combination of PropertyValuesHolder and Keyframe resource tags to create a multi-step animation. Note that you can specify explicit fractional values (from 0 to 1) for each keyframe to determine when, in the overall duration, the animation should arrive at that value. Alternatively, you can leave the fractions off and the keyframes will be equally distributed within the total duration:
Summary
Constants |
|
|---|---|
static final int |
INFINITE = -1This value used used with the |
static final int |
RESTART = 1When the animation reaches the end and |
static final int |
REVERSE = 2When the animation reaches the end and |
Public constructors |
|---|
|
Creates a new ValueAnimator object. |
Public methods |
|
|---|---|
static boolean |
Returns whether animators are currently enabled, system-wide. |
void |
cancel()Cancels the animation. |
@NonNull ValueAnimator |
clone() |
void |
end()Ends the animation. |
float |
Returns the current animation fraction, which is the elapsed/interpolated fraction used in the most recent frame update on the animation. |
@NonNull Object |
The most recent value calculated by this |
@Nullable Object |
getAnimatedValue(@NonNull String propertyName)The most recent value calculated by this |
long |
Gets the current position of the animation in time, which is equal to the current time minus the time that the animation started. |
long |
Gets the length of the animation. |
static long |
The amount of time, in milliseconds, between each frame of the animation. |
@Nullable Interpolator |
Returns the timing interpolator that this ValueAnimator uses. |
@NonNull String |
Returns the name of this animator for debugging purposes. |
int |
Defines how many times the animation should repeat. |
int |
Defines what this animation should do when it reaches the end. |
long |
The amount of time, in milliseconds, to delay starting the animation after |
long |
Gets the total duration of the animation, accounting for animation sequences, start delay, and repeating. |
@NonNull PropertyValuesHolder[] |
Returns the values that this ValueAnimator animates between. |
boolean |
Returns whether this Animator is currently running (having been started and gone past any initial startDelay period and not yet ended). |
boolean |
Returns whether this Animator has been started and not yet ended. |
static @NonNull ValueAnimator |
Constructs and returns a ValueAnimator that animates between color values. |
static @NonNull ValueAnimator |
Constructs and returns a ValueAnimator that animates between float values. |
static @NonNull ValueAnimator |
Constructs and returns a ValueAnimator that animates between int values. |
static @NonNull ValueAnimator |
ofObject(@NonNull TypeEvaluator evaluator, @NonNull Object[] values)Constructs and returns a ValueAnimator that animates between Object values. |
static @NonNull ValueAnimator |
ofPropertyValuesHolder(@NonNull PropertyValuesHolder[] values)Constructs and returns a ValueAnimator that animates between the values specified in the PropertyValuesHolder objects. |
void |
pause()Pauses a running animation. |
void |
resume()Resumes a paused animation, causing the animator to pick up where it left off when it was paused. |
void |
reverse()Plays the ValueAnimator in reverse. |
void |
setCurrentFraction(float fraction)Sets the position of the animation to the specified fraction. |
void |
setCurrentPlayTime(long playTime)Sets the position of the animation to the specified point in time. |
@NonNull ValueAnimator |
setDuration(long duration)Sets the length of the animation. |
void |
setEvaluator(@NonNull TypeEvaluator value)The type evaluator to be used when calculating the animated values of this animation. |
void |
setFloatValues(@NonNull 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 |
setIntValues(@NonNull int[] values)Sets int values that will be animated between. |
void |
setInterpolator(@Nullable Interpolator value)The interpolator used in calculating the elapsed fraction of this animation. |
void |
setNameForTrace(@NonNull String animationName)Sets a name for the animation to show up in the systrace. |
void |
setObjectValues(@NonNull 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 |
void |
Sets the values, per property, being animated between. |
void |
start()Starts this animation. |
@NonNull String |
toString() |
Inherited Constants |
||
|---|---|---|
|
Inherited methods |
||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Constants
INFINITE
public static final int INFINITE = -1
This value used used with the setRepeatCount property to repeat the animation indefinitely.
RESTART
public static final int RESTART = 1
When the animation reaches the end and repeatCount is INFINITE or a positive value, the animation restarts from the beginning.
REVERSE
public static final int REVERSE = 2
When the animation reaches the end and repeatCount is INFINITE or a positive value, the animation reverses direction on every iteration.
Public constructors
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.
Public methods
areAnimatorsEnabled
public static boolean areAnimatorsEnabled()
Returns whether animators are currently enabled, system-wide. By default, all animators are enabled. This can change if either the user sets a Developer Option to set the animator duration scale to 0 or by Battery Savery mode being enabled (which disables all animations).
Developers should not typically need to call this method, but should an app wish to show a different experience when animators are disabled, this return value can be used as a decider of which experience to offer.
| Returns | |
|---|---|
boolean |
boolean Whether animators are currently enabled. The default value is |
cancel
public void cancel()
Cancels the animation. Unlike end, cancel() causes the animation to stop in its tracks, sending an onAnimationCancel to its listeners, followed by an onAnimationEnd message.
This method must be called on the thread that is running the animation.
end
public void end()
Ends the animation. This causes the animation to assign the end value of the property being animated, then calling the onAnimationEnd method on its listeners.
This method must be called on the thread that is running the animation.
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 | |
|---|---|
float |
Elapsed/interpolated fraction of the animation. |
getAnimatedValue
public @NonNull 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 onAnimationUpdate, which is called during each animation frame, immediately after the value is calculated.
| Returns | |
|---|---|
@NonNull Object |
animatedValue The value most recently calculated by this |
getAnimatedValue
public @Nullable Object getAnimatedValue(@NonNull 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 onAnimationUpdate, which is called during each animation frame, immediately after the value is calculated.
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, unless the animation has has its play time set via setCurrentPlayTime or setCurrentFraction, in which case it will return the time that was set.
| Returns | |
|---|---|
long |
The current position in time of the animation. |
getDuration
public long getDuration()
Gets the length of the animation. The default duration is 300 milliseconds.
| Returns | |
|---|---|
long |
The length of the animation, 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. The frame delay may be ignored when the animation system uses an external timing source, such as the display refresh rate (vsync), to govern animations. Note that this method should be called from the same thread that start is called in order to check the frame delay for that animation. A runtime exception will be thrown if the calling thread does not have a Looper.
| Returns | |
|---|---|
long |
the requested time between frames, in milliseconds |
getInterpolator
public @Nullable Interpolator getInterpolator()
Returns the timing interpolator that this ValueAnimator uses.
| Returns | |
|---|---|
@Nullable Interpolator |
The timing interpolator for this ValueAnimator. |
getNameForTrace
public @NonNull String getNameForTrace()
Returns the name of this animator for debugging purposes.
getRepeatCount
public int getRepeatCount()
Defines how many times the animation should repeat. The default value is 0.
| Returns | |
|---|---|
int |
the number of times the animation should repeat, or |
getRepeatMode
public int getRepeatMode()
Defines what this animation should do when it reaches the end.
getStartDelay
public long getStartDelay()
The amount of time, in milliseconds, to delay starting the animation after start is called.
| Returns | |
|---|---|
long |
the number of milliseconds to delay running the animation |
getTotalDuration
public long getTotalDuration()
Gets the total duration of the animation, accounting for animation sequences, start delay, and repeating.
When the animation repeats infinite times, or when any of the child animators does (via setRepeatCount} to INFINITE), the total duration will be DURATION_INFINITE. Otherwise, the total duration is the sum of start delay and animation running time (i.e. duration of one iteration multiplied by the number of iterations).
| Returns | |
|---|---|
long |
Total time an animation takes to finish, starting from the time |
getValues
public @NonNull 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 | |
|---|---|
@NonNull PropertyValuesHolder[] |
PropertyValuesHolder[] An array of PropertyValuesHolder objects which hold the values, per property, that define the animation. |
isRunning
public boolean isRunning()
Returns whether this Animator is currently running (having been started and gone past any initial startDelay period and not yet ended).
| Returns | |
|---|---|
boolean |
Whether the Animator is running. |
isStarted
public boolean isStarted()
Returns whether this Animator has been started and not yet ended. For reusable Animators (which most Animators are, apart from the one-shot animator produced by createCircularReveal()), this state is a superset of isRunning, because an Animator with a nonzero startDelay will return true for isStarted during the delay phase, whereas isRunning will return true only after the delay phase is complete. Non-reusable animators will always return true after they have been started, because they cannot return to a non-started state.
| Returns | |
|---|---|
boolean |
Whether the Animator has been started and not yet ended. |
ofArgb
public static @NonNull ValueAnimator ofArgb(@NonNull int[] values)
Constructs and returns a ValueAnimator that animates between color 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 | |
|---|---|
@NonNull int[] values |
A set of values that the animation will animate between over time. |
| Returns | |
|---|---|
@NonNull ValueAnimator |
A ValueAnimator object that is set up to animate between the given values. |
ofFloat
public static @NonNull ValueAnimator ofFloat(@NonNull 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 | |
|---|---|
@NonNull float[] values |
A set of values that the animation will animate between over time. |
| Returns | |
|---|---|
@NonNull ValueAnimator |
A ValueAnimator object that is set up to animate between the given values. |
ofInt
public static @NonNull ValueAnimator ofInt(@NonNull 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 | |
|---|---|
@NonNull int[] values |
A set of values that the animation will animate between over time. |
| Returns | |
|---|---|
@NonNull ValueAnimator |
A ValueAnimator object that is set up to animate between the given values. |
ofObject
public static @NonNull ValueAnimator ofObject(@NonNull TypeEvaluator evaluator, @NonNull 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.
Note: The Object values are stored as references to the original objects, which means that changes to those objects after this method is called will affect the values on the animator. If the objects will be mutated externally after this method is called, callers should pass a copy of those objects instead.
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 | |
|---|---|
@NonNull TypeEvaluator evaluator |
A TypeEvaluator that will be called on each animation frame to provide the necessary interpolation between the Object values to derive the animated value. |
@NonNull Object[] values |
A set of values that the animation will animate between over time. |
| Returns | |
|---|---|
@NonNull ValueAnimator |
A ValueAnimator object that is set up to animate between the given values. |
ofPropertyValuesHolder
public static @NonNull ValueAnimator ofPropertyValuesHolder(@NonNull PropertyValuesHolder[] values)
Constructs and returns a ValueAnimator that animates between the values specified in the PropertyValuesHolder objects.
| Parameters | |
|---|---|
@NonNull PropertyValuesHolder[] values |
A set of PropertyValuesHolder objects whose values will be animated between over time. |
| Returns | |
|---|---|
@NonNull ValueAnimator |
A ValueAnimator object that is set up to animate between the given values. |
pause
public void pause()
Pauses a running animation. This method should only be called on the same thread on which the animation was started. If the animation has not yet been started or has since ended, then the call is ignored. Paused animations can be resumed by calling resume.
| See also | |
|---|---|
resume |
|
isPaused |
|
Animator.AnimatorPauseListener |
resume
public void resume()
Resumes a paused animation, causing the animator to pick up where it left off when it was paused. This method should only be called on the same thread on which the animation was started. Calls to resume() on an animator that is not currently paused will be ignored.
| See also | |
|---|---|
pause |
|
isPaused |
|
Animator.AnimatorPauseListener |
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.
setCurrentFraction
public void setCurrentFraction(float fraction)
Sets the position of the animation to the specified fraction. This fraction should be between 0 and the total fraction of the animation, including any repetition. That is, a fraction of 0 will position the animation at the beginning, a value of 1 at the end, and a value of 2 at the end of a reversing animator that repeats once. If the animation has not yet been started, then it will not advance forward after it is set to this fraction; it will simply set the fraction to this value and perform any appropriate actions based on that fraction. If the animation is already running, then setCurrentFraction() will set the current fraction to this value and continue playing from that point. androidx.core.animation.Animator.AnimatorListener events are not called due to changing the fraction; those events are only processed while the animation is running.
| Parameters | |
|---|---|
float fraction |
The fraction to which the animation is advanced or rewound. Values outside the range of 0 to the maximum fraction for the animator will be clamped to the correct range. |
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 | |
|---|---|
long playTime |
The time, in milliseconds, to which the animation is advanced or rewound. |
setDuration
public @NonNull ValueAnimator setDuration(long duration)
Sets the length of the animation. The default duration is 300 milliseconds.
| Parameters | |
|---|---|
long duration |
The length of the animation, in milliseconds. This value cannot be negative. |
| Returns | |
|---|---|
@NonNull ValueAnimator |
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 |
setEvaluator
public void setEvaluator(@NonNull 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 | |
|---|---|
@NonNull TypeEvaluator value |
the evaluator to be used this animation |
setFloatValues
public void setFloatValues(@NonNull 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 | |
|---|---|
@NonNull float[] values |
A set of values that the animation will animate between over time. |
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. The frame delay may be ignored when the animation system uses an external timing source, such as the display refresh rate (vsync), to govern animations. Note that this method should be called from the same thread that start is called in order to have the new frame delay take effect on that animation. A runtime exception will be thrown if the calling thread does not have a Looper.
| Parameters | |
|---|---|
long frameDelay |
the requested time between frames, in milliseconds |
setIntValues
public void setIntValues(@NonNull 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 | |
|---|---|
@NonNull int[] values |
A set of values that the animation will animate between over time. |
setInterpolator
public void setInterpolator(@Nullable Interpolator value)
The 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
| Parameters | |
|---|---|
@Nullable Interpolator value |
the interpolator to be used by this animation. A value of |
setNameForTrace
public void setNameForTrace(@NonNull String animationName)
Sets a name for the animation to show up in the systrace. This makes a particular animation identifiable in the systrace.
setObjectValues
public void setObjectValues(@NonNull 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.
Note: The Object values are stored as references to the original objects, which means that changes to those objects after this method is called will affect the values on the animator. If the objects will be mutated externally after this method is called, callers should pass a copy of those objects instead.
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 | |
|---|---|
@NonNull Object[] values |
The set of values to animate between. |
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 | |
|---|---|
int value |
the number of times the animation should be repeated |
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.
setStartDelay
public void setStartDelay(long startDelay)
The amount of time, in milliseconds, to delay starting the animation after start is called. Note that the start delay should always be non-negative. Any negative start delay will be clamped to 0 on N and above.
| Parameters | |
|---|---|
long startDelay |
The amount of the delay, in milliseconds |
setValues
public void setValues(@NonNull 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 a ValueAnimator can be constructed without values and this method can be called to set the values manually instead.
| Parameters | |
|---|---|
@NonNull PropertyValuesHolder[] values |
The set of values, per property, being animated between. |
start
public void start()
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 onAnimationStart 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.