Files
AndroidJetpack/Jetpack-Compose-Playground/docs/animation/crossfade.md
T
2026-07-15 16:57:36 +08:00

64 lines
2.7 KiB
Markdown

<!---
This is the API of version 1.2.0
-->
# Crossfade
Crossfade can be used to switch between Composables with an crossfade animation.
<div>
<video height="500" align="center" controls>
<source src="{{ site.images }}/animation/crossfade/crossfadedemo.webm" type="video/webm" align="center">
</video>
</div>
Example video of the code below. On every button click, the content of the screen will change with an animation duration of 3 seconds.
```kotlin
enum class MyColors(val color: Color) {
Red(Color.Red), Green(Color.Green), Blue(Color.Blue)
}
@Composable
fun CrossfadeDemo() {
var currentColor by remember { mutableStateOf(MyColors.Red) }
Column {
Row {
MyColors.values().forEach { myColors ->
Button(
onClick = { currentColor = myColors },
Modifier.weight(1f, true)
.height(48.dp)
.background(myColors.color),
colors = ButtonDefaults.buttonColors(backgroundColor = myColors.color)
) {
Text(myColors.name)
}
}
}
Crossfade(targetState = currentColor, animationSpec = tween(3000)) { selectedColor ->
Box(modifier = Modifier.fillMaxSize().background(selectedColor.color))
}
}
}
```
## How does it work?
As you can see in the video above, this demo consists of a screen with 3 buttons at the top. On a button click, the screen below will change to the selected color.
```kotlin
Crossfade(targetState = currentColor, animationSpec = tween(3000)) { selectedColor ->
Box(modifier = Modifier.fillMaxSize().background(selectedColor.color))
}
```
Crossfade expects some kind of state to detect when it should recompose. In this example, this is **currentColor**, which is a state with the selected color enum. This state will be set to the **current** parameter.
With the **animationSpec** parameter, you can set which animation should be used to switch between the Composables. The default parameter here is the **tween** animation. You can choose between any class that implements **AnimationSpec**.
The **3000** in this example is the duration that the tween animation will have.
The last parameter is the body of the Crossfade Composable. Here you have to create the UI that you want to display. **selectedColor** is the current value of **currentColor**. In this example i'm using a Box to display the colors.
Everytime one of the 3 buttons is clicked, the value of currentColor will change and the Crossfade will recompose with an animation between the old and new UI.
## See also:
* [Full Example Code]({{ site.samplefolder }}/animation/crossfade/CrossfadeDemo.kt)