Google is committed to advancing racial equity for Black communities. See how.


class TransitionSpec<S>
   ↳ androidx.compose.animation.core.TransitionSpec

Static specification for the transition from one state to another.

Each property involved in the states that the transition is from and to can have an animation associated with it. When such an animation is defined, the animation system will be using it instead of the default FloatSpringSpec animation to animate the value change for that property.

import androidx.compose.animation.core.FloatPropKey
import androidx.compose.animation.core.keyframes
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.transitionDefinition
import androidx.compose.animation.core.tween

val Radius = FloatPropKey()
val Alpha = FloatPropKey()
val Background = FloatPropKey()

transitionDefinition<ButtonState> {
    // This defines animations for 3 properties: Radius, Alpha, and Background.
    transition(fromState = ButtonState.Released, toState = ButtonState.Pressed) {
        Radius using tween(
            easing = LinearEasing,
            durationMillis = 75
        Alpha using keyframes {
            durationMillis = 375
            0f at 0 // ms  // Optional
            0.4f at 75 // ms
            0.4f at 225 // ms
            0f at 375 // ms  // Optional
        Background using spring(
            dampingRatio = 1.0f
        interruptionHandling = InterruptionHandling.UNINTERRUPTIBLE


Public methods
infix Unit
PropKey<T, V>.using(animationSpec: AnimationSpec<T>)

Associates a property with an AnimationSpec


The interruption handling mechanism.


Optional state where should we start switching after this transition finishing.

Public methods


infix fun <T, V : AnimationVector> PropKey<T, V>.using(animationSpec: AnimationSpec<T>): Unit

Associates a property with an AnimationSpec

animationSpec: AnimationSpec<T> : AnimationSpec for animating this property value changes



var interruptionHandling: InterruptionHandling

The interruption handling mechanism. The default interruption handling is InterruptionHandling.PHYSICS. Meaning both value and velocity of the property will be preserved as the target state (and therefore target animation value) changes. InterruptionHandling.TWEEN, which only ensures the continuity of current animation value. InterruptionHandling.UNINTERRUPTIBLE defines a scenario where an animation is so important that it cannot be interrupted, so the new state request has to be queued. InterruptionHandling.SNAP_TO_END can be used for cases where higher priority events (such as user gesture) come in and the on-going animation needs to finish immediately to give way to the user events.


var nextState: S?

Optional state where should we start switching after this transition finishing.