Animatable
@RememberInComposition
public fun Animatable(
initialValue: Float,
visibilityThreshold: Float = Spring.DefaultDisplacementThreshold,
): Animatable<Float, AnimationVector1D>
This Animatable
function creates a float value holder that automatically animates its value
when the value is changed via animateTo
. Animatable
supports value change during an ongoing
value change animation. When that happens, a new animation will transition Animatable
from its
current value (i.e. value at the point of interruption) to the new target. This ensures that the
value change is always continuous using animateTo
. If spring
animation (i.e. default
animation) is used with animateTo
, the velocity change will be guaranteed to be continuous as
well.
Unlike AnimationState
, Animatable
ensures mutual exclusiveness on its animation. To do so,
when a new animation is started via animateTo
(or animateDecay
), any ongoing animation job
will be cancelled.
Parameters
initialValue | initial value of the animatable value holder |
visibilityThreshold | Threshold at which the animation may round off to its target value. Spring.DefaultDisplacementThreshold by default. |
Code Examples
AnimatableFadeIn
fun AnimatableFadeIn() {
fun Modifier.fadeIn(): Modifier = composed {
// Creates an `Animatable` and remembers it.
val alphaAnimation = remember { Animatable(0f) }
// Launches a coroutine for the animation when entering the composition.
// Uses `alphaAnimation` as the subject so the job in `LaunchedEffect` will run only when
// `alphaAnimation` is created, which happens one time when the modifier enters
// composition.
LaunchedEffect(alphaAnimation) {
// Animates to 1f from 0f for the fade-in, and uses a 500ms tween animation.
alphaAnimation.animateTo(
targetValue = 1f,
// Default animationSpec uses [spring] animation, here we overwrite the default.
animationSpec = tween(500),
)
}
this.graphicsLayer(alpha = alphaAnimation.value)
}
}