我用JetPack Compose 搭建的项目,有用到Navigation, 有20个页面,我想为每个页面都添加上转场动画
时间: 2023-05-17 21:03:51 浏览: 77
非常棒的问题!您可以使用Compose提供的Transition API来为每个页面添加转场动画。您可以使用Slide、Fade、Scale等效果来实现不同的动画效果。以下是一个简单的示例代码:
```kotlin
@Composable
fun MyApp() {
val navController = rememberNavController()
NavHost(navController, startDestination = "home") {
composable("home") { HomeScreen(navController) }
composable("profile") { ProfileScreen(navController) }
// 添加更多页面
}
}
@Composable
fun HomeScreen(navController: NavController) {
// 添加页面内容
Button(onClick = { navController.navigate("profile") }) {
Text("跳转到Profile页面")
}
}
@Composable
fun ProfileScreen(navController: NavController) {
// 添加页面内容
}
@Preview
@Composable
fun PreviewMyApp() {
MyApp()
}
```
在上面的代码中,我们使用NavHost和NavController来管理页面导航。在每个页面中,我们可以使用Button等组件来触发页面跳转。为了添加转场动画,我们可以使用Transition组件,如下所示:
```kotlin
@Composable
fun MyApp() {
val navController = rememberNavController()
NavHost(navController, startDestination = "home") {
composable("home") { HomeScreen(navController) }
composable("profile") { ProfileScreen(navController) }
// 添加更多页面
}
}
@Composable
fun HomeScreen(navController: NavController) {
// 添加页面内容
val transition = updateTransition(targetState = true, label = "transition")
val alpha by transition.animateFloat(
label = "alpha",
transitionSpec = {
tween(durationMillis = 500)
}
) { state ->
if (state) 1f else 0f
}
Box(
modifier = Modifier
.fillMaxSize()
.alpha(alpha)
) {
// 添加页面内容
Button(onClick = { navController.navigate("profile") }) {
Text("跳转到Profile页面")
}
}
}
@Composable
fun ProfileScreen(navController: NavController) {
// 添加页面内容
val transition = updateTransition(targetState = true, label = "transition")
val alpha by transition.animateFloat(
label = "alpha",
transitionSpec = {
tween(durationMillis = 500)
}
) { state ->
if (state) 1f else 0f
}
Box(
modifier = Modifier
.fillMaxSize()
.alpha(alpha)
) {
// 添加页面内容
}
}
@Preview
@Composable
fun PreviewMyApp() {
MyApp()
}
```
在上面的代码中,我们使用updateTransition函数来创建一个Transition对象,并使用animateFloat函数来定义动画效果。在HomeScreen和ProfileScreen中,我们将页面内容放在一个Box组件中,并使用alpha属性来控制页面的透明度。当页面跳转时,我们可以通过NavController来切换页面,并触发转场动画。
阅读全文