Android 12 Developer Preview is here! Try it out, and give us your feedback!

Keyframe

abstract class Keyframe<T : Any!> : Cloneable
kotlin.Any
   ↳ androidx.core.animation.Keyframe

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.

Summary

Public constructors

This class holds a time/value pair for an animation.

Public methods
abstract Keyframe<T>

open Float

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

open Interpolator?

Gets the optional interpolator for this Keyframe.

open Class<*>

Gets the type of keyframe.

abstract T?

Gets the value for this Keyframe.

open Boolean

Indicates whether this keyframe has a valid value.

open static Keyframe<Float!>
ofFloat(@FloatRange(0, 1) fraction: Float, value: Float)

Constructs a Keyframe object with the given time and value.

open static Keyframe<Float!>
ofFloat(@FloatRange(0, 1) fraction: Float)

Constructs a Keyframe object with the given time.

open static Keyframe<Int!>
ofInt(@FloatRange(0, 1) fraction: Float, value: Int)

Constructs a Keyframe object with the given time and value.

open static Keyframe<Int!>
ofInt(@FloatRange(0, 1) fraction: Float)

Constructs a Keyframe object with the given time.

open static Keyframe<T>
ofObject(@FloatRange(0, 1) fraction: Float, @Nullable value: T?)

Constructs a Keyframe object with the given time and value.

open static Keyframe<T>
ofObject(@FloatRange(0, 1) fraction: Float)

Constructs a Keyframe object with the given time.

open Unit
setFraction(@FloatRange(0, 1) fraction: Float)

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

open Unit
setInterpolator(@Nullable interpolator: Interpolator?)

Sets the optional interpolator for this Keyframe.

abstract Unit
setValue(@Nullable value: T?)

Sets the value for this Keyframe.

Public constructors

<init>

Keyframe()

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.

Public methods

clone

@NonNull abstract fun clone(): Keyframe<T>

getFraction

@FloatRange(0, 1) open fun getFraction(): Float

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

Return
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

@Nullable open fun getInterpolator(): Interpolator?

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

Return
Interpolator? The optional interpolator for this Keyframe.

getType

@NonNull open fun getType(): Class<*>

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.

Return
Class<*> The type of the value stored in the Keyframe.

getValue

@Nullable abstract fun getValue(): T?

Gets the value for this Keyframe.

Return
T? The value for this Keyframe.

hasValue

open fun hasValue(): Boolean

Indicates whether this keyframe has a valid value. This method is called internally when an