public abstract class Keyframe<T> implements Cloneable


This class holds a time/value pair for an animation. The Keyframe class is used by ValueAnimator to define the values that the animation target will have over the course of the animation. As the time proceeds from one keyframe to the other, the value of the target object will animate between the value at the previous keyframe and the value at the next keyframe. Each keyframe also holds an optional Interpolator object, which defines the time interpolation over the intervalue preceding the keyframe.

The Keyframe class itself is abstract. The type-specific factory methods will return a subclass of Keyframe specific to the type of value being stored. This is done to improve performance when dealing with the most common cases (e.g., float and int values). Other types will fall into a more general Keyframe class that treats its values as Objects. Unless your animation requires dealing with a custom type or a data structure that needs to be animated directly (and evaluated using an implementation of TypeEvaluator), you should stick to using float and int as animations using those types have lower runtime overhead than other types.

Parameters
<T>

type of the data value stored in a key frame.

Summary

Public constructors

Public methods

abstract @NonNull Keyframe<T>
@FloatRange(from = 0, to = 1) float

Gets the time for this keyframe, as a fraction of the overall animation duration.

@Nullable Interpolator

Gets the optional interpolator for this Keyframe.

@NonNull Class<Object>

Gets the type of keyframe.

abstract @Nullable T

Gets the value for this Keyframe.

boolean

Indicates whether this keyframe has a valid value.

static @NonNull Keyframe<Float>
ofFloat(@FloatRange(from = 0, to = 1) float fraction)

Constructs a Keyframe object with the given time.

static @NonNull Keyframe<Float>
ofFloat(@FloatRange(from = 0, to = 1) float fraction, float value)

Constructs a Keyframe object with the given time and value.

static @NonNull Keyframe<Integer>
ofInt(@FloatRange(from = 0, to = 1) float fraction)

Constructs a Keyframe object with the given time.

static @NonNull Keyframe<Integer>
ofInt(@FloatRange(from = 0, to = 1) float fraction, int value)

Constructs a Keyframe object with the given time and value.

static @NonNull Keyframe<T>
<T> ofObject(@FloatRange(from = 0, to = 1) float fraction)

Constructs a Keyframe object with the given time.

static @NonNull Keyframe<T>
<T> ofObject(@FloatRange(from = 0, to = 1) float fraction, @Nullable T value)

Constructs a Keyframe object with the given time and value.

void
setFraction(@FloatRange(from = 0, to = 1) float fraction)

Sets the time for this keyframe, as a fraction of the overall animation duration.

void

Sets the optional interpolator for this Keyframe.

abstract void
setValue(@Nullable T value)

Sets the value for this Keyframe.

Public constructors

Keyframe

public Keyframe()

Public methods

clone

public abstract @NonNull Keyframe<T> clone()

getFraction

public @FloatRange(from = 0, to = 1) float getFraction()

Gets the time for this keyframe, as a fraction of the overall animation duration.

Returns
@FloatRange(from = 0, to = 1) float

The time associated with this keyframe, as a fraction of the overall animation duration. This should be a value between 0 and 1.

getInterpolator

public @Nullable Interpolator getInterpolator()

Gets the optional interpolator for this Keyframe. A value of null indicates that there is no interpolation, which is the same as linear interpolation.

Returns
@Nullable Interpolator

The optional interpolator for this Keyframe.

getType

public @NonNull Class<ObjectgetType()

Gets the type of keyframe. This information is used by ValueAnimator to determine the type of TypeEvaluator to use when calculating values between keyframes. The type is based on the type of Keyframe created.

Returns
@NonNull Class<Object>

The type of the value stored in the Keyframe.

getValue

public abstract @NullablegetValue()

Gets the value for this Keyframe.

Returns
@Nullable T

The value for this Keyframe.

hasValue

public boolean hasValue()

Indicates whether this keyframe has a valid value. This method is called internally when an ObjectAnimator first starts; keyframes without values are assigned values at that time by deriving the value for the property from the target object.

Returns
boolean

boolean Whether this object has a value assigned.

ofFloat

public static @NonNull Keyframe<FloatofFloat(@FloatRange(from = 0, to = 1) float fraction)

Constructs a Keyframe object with the given time. The value at this time will be derived from the target object when the animation first starts (note that this implies that keyframes with no initial value must be used as part of an ObjectAnimator). The time defines the time, as a proportion of an overall animation's duration, at which the value will hold true for the animation. The value for the animation between keyframes will be calculated as an interpolation between the values at those keyframes.

Parameters
@FloatRange(from = 0, to = 1) float fraction

The time, expressed as a value between 0 and 1, representing the fraction of time elapsed of the overall animation duration.

ofFloat

public static @NonNull Keyframe<FloatofFloat(@FloatRange(from = 0, to = 1) float fraction, float value)

Constructs a Keyframe object with the given time and value. The time defines the time, as a proportion of an overall animation's duration, at which the value will hold true for the animation. The value for the animation between keyframes will be calculated as an interpolation between the values at those keyframes.

Parameters
@FloatRange(from = 0, to = 1) float fraction

The time, expressed as a value between 0 and 1, representing the fraction of time elapsed of the overall animation duration.

float value

The value that the object will animate to as the animation time approaches the time in this keyframe, and the the value animated from as the time passes the time in this keyframe.

ofInt

public static @NonNull Keyframe<IntegerofInt(@FloatRange(from = 0, to = 1) float fraction)

Constructs a Keyframe object with the given time. The value at this time will be derived from the target object when the animation first starts (note that this implies that keyframes with no initial value must be used as part of an ObjectAnimator). The time defines the time, as a proportion of an overall animation's duration, at which the value will hold true for the animation. The value for the animation between keyframes will be calculated as an interpolation between the values at those keyframes.

Parameters
@FloatRange(from = 0, to = 1) float fraction

The time, expressed as a value between 0 and 1, representing the fraction of time elapsed of the overall animation duration.

ofInt

public static @NonNull Keyframe<IntegerofInt(@FloatRange(from = 0, to = 1) float fraction, int value)

Constructs a Keyframe object with the given time and value. The time defines the time, as a proportion of an overall animation's duration, at which the value will hold true for the animation. The value for the animation between keyframes will be calculated as an interpolation between the values at those keyframes.

Parameters
@FloatRange(from = 0, to = 1) float fraction

The time, expressed as a value between 0 and 1, representing the fraction of time elapsed of the overall animation duration.

int value

The value that the object will animate to as the animation time approaches the time in this keyframe, and the the value animated from as the time passes the time in this keyframe.

ofObject

public static @NonNull Keyframe<T> <T> ofObject(@FloatRange(from = 0, to = 1) float fraction)

Constructs a Keyframe object with the given time. The value at this time will be derived from the target object when the animation first starts (note that this implies that keyframes with no initial value must be used as part of an ObjectAnimator). The time defines the time, as a proportion of an overall animation's duration, at which the value will hold true for the animation. The value for the animation between keyframes will be calculated as an interpolation between the values at those keyframes.

Parameters
@FloatRange(from = 0, to = 1) float fraction

The time, expressed as a value between 0 and 1, representing the fraction of time elapsed of the overall animation duration.

ofObject

public static @NonNull Keyframe<T> <T> ofObject(@FloatRange(from = 0, to = 1) float fraction, @Nullable T value)

Constructs a Keyframe object with the given time and value. The time defines the time, as a proportion of an overall animation's duration, at which the value will hold true for the animation. The value for the animation between keyframes will be calculated as an interpolation between the values at those keyframes.

Parameters
@FloatRange(from = 0, to = 1) float fraction

The time, expressed as a value between 0 and 1, representing the fraction of time elapsed of the overall animation duration.

@Nullable T value

The value that the object will animate to as the animation time approaches the time in this keyframe, and the the value animated from as the time passes the time in this keyframe.

setFraction

public void setFraction(@FloatRange(from = 0, to = 1) float fraction)

Sets the time for this keyframe, as a fraction of the overall animation duration.

Parameters
@FloatRange(from = 0, to = 1) float fraction

time associated with this keyframe, as a fraction of the overall animation duration. This should be a value between 0 and 1.

setInterpolator

public void setInterpolator(@Nullable Interpolator interpolator)

Sets the optional interpolator for this Keyframe. A value of null indicates that there is no interpolation, which is the same as linear interpolation.

setValue

public abstract void setValue(@Nullable T value)

Sets the value for this Keyframe.

Parameters
@Nullable T value

value for this Keyframe.