animateTo
Function
Common
public suspend fun <T, V : AnimationVector> AnimationState<T, V>.animateTo(
targetValue: T,
animationSpec: AnimationSpec<T> = spring(),
sequentialAnimation: Boolean = false,
block: AnimationScope<T, V>.() -> Unit = {},
)
Target based animation that takes the value and velocity from the AnimationState
as the
starting condition, and animate to the targetValue
, using the animationSpec
. During the
animation, the given AnimationState
will be updated with the up-to-date value/velocity, frame
time, etc.
Parameters
targetValue | The target value that the animation will animate to. |
animationSpec | The animation configuration that will be used. spring by default. |
sequentialAnimation | Indicates whether the animation should use the AnimationState.lastFrameTimeNanos as the starting time (if true), or start in a new frame. By default, sequentialAnimation is false, to start the animation in a few frame. In cases where an on-going animation is interrupted and a new animation is started to carry over the momentum, using the interruption time (captured in AnimationState.lastFrameTimeNanos ) creates a smoother animation. |
block | Will be invoked on every frame, and the AnimationScope will be checked against cancellation before the animation continues. To cancel the animation from the block , simply call AnimationScope.cancelAnimation . After AnimationScope.cancelAnimation is called, block will not be invoked again. The animation loop will exit after the block returns. All the animation related info can be accessed via AnimationScope . |
Code Examples
animateToOnAnimationState
fun animateToOnAnimationState() {
@Composable
fun simpleAnimate(target: Float): Float {
// Create an AnimationState to be updated by the animation.
val animationState = remember { AnimationState(target) }
// Launch the suspend animation into the composition's CoroutineContext, and pass
// `target` to LaunchedEffect so that when`target` changes the old animation job is
// canceled, and a new animation is created with a new target.
LaunchedEffect(target) {
// This starts an animation that updates the animationState on each frame
animationState.animateTo(
targetValue = target,
// Use a low stiffness spring. This can be replaced with any type of `AnimationSpec`
animationSpec = spring(stiffness = Spring.StiffnessLow),
// If the previous animation was interrupted (i.e. not finished), configure the
// animation as a sequential animation to continue from the time the animation was
// interrupted.
sequentialAnimation = !animationState.isFinished,
)
// When the function above returns, the animation has finished.
}
// Return the value updated by the animation.
return animationState.value
}
}