在 Jetpack Compose 中 Animation 是用來實現視覺過渡效果的工具,它可以讓 UI 元件隨著狀態變化進行平滑的動畫切換,從而提升用戶體驗。
在之前的 Animation 有很多種如View Animator、Drawable Animator…,那在 Compose 中也有很多種,而官方有針對 Animation 的抉擇做出一個選擇圖來方便我們判斷什麼情況適合用什麼 Animation,以下會針對三個比較簡單的做介紹。
透過動畫來呈現與消失
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
var visible by remember {
mutableStateOf(false)
}
Column {
Button(
onClick = {
visible = visible.not()
}
) {
Text(
text = "Say Hello!",
modifier = modifier
)
}
AnimatedVisibility(visible) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
}
}
透過動畫來改變內容
@Composable
fun animateContentComposable() {
Column {
var count by remember { mutableIntStateOf(0) }
Button(onClick = { count++ }) {
Text("Add")
}
AnimatedContent(targetState = count, label = "") { targetCount ->
Text(text = "Count: $targetCount")
}
}
}
透過動畫來改變元件屬性
animate*AsState 有提供這些類型的屬性變化Float
、Color
、Dp
、Size
、Offset
、Rect
、Int
、IntOffset
和 IntSize
。
@Composable
fun animateAsStateComposable() {
var isClicked by remember {
mutableStateOf(false)
}
val color by animateColorAsState(if (isClicked) Color.Red else Color.Blue)
Box(
modifier = Modifier
.size(100.dp)
.background(color)
.clickable { isClicked = !isClicked }
)
}