如何在Android Jetpack Compose Destination库中添加过渡动画?
解决Compose Destinations自定义导航过渡动画不生效的问题
你的代码问题在于**rootDefaultAnimations参数覆盖了自定义动画配置**,同时root导航图的动画配置方式不正确。以下是修正方案:
关键问题分析
RootNavGraphDefaultAnimations.ACCOMPANIST_FADING会强制root导航图使用默认的淡入淡出动画,优先级高于你在defaultAnimationsForNestedNavGraph里设置的自定义动画。- root导航图的动画不需要放在
defaultAnimationsForNestedNavGraph映射中,直接通过RootNavGraphDefaultAnimations的自定义实例配置即可。
修正后的代码
Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { val navHostEngine = rememberAnimatedNavHostEngine( navHostContentAlignment = Alignment.TopCenter, // 移除ACCOMPANIST_FADING,改用自定义的root默认动画 rootDefaultAnimations = RootNavGraphDefaultAnimations( enterTransition = { slideInHorizontally(initialOffsetX = { it }) }, exitTransition = { slideOutHorizontally(targetOffsetX = { -it }) }, popEnterTransition = { slideInHorizontally(initialOffsetX = { -it }) }, popExitTransition = { slideOutHorizontally(targetOffsetX = { it }) } ) // 移除defaultAnimationsForNestedNavGraph,因为root不是嵌套导航图 ) DestinationsNavHost( navGraph = NavGraphs.root, engine = navHostEngine, navController = rememberAnimatedNavController() ) }
额外说明
- 如果你需要为嵌套导航图设置自定义动画,才需要使用
defaultAnimationsForNestedNavGraph参数,比如项目中有子导航图时。 - 确保已添加Accompanist动画依赖(未添加的话补充):
implementation "com.google.accompanist:accompanist-navigation-animation:<latest-version>"
- 动画效果可按需调整,比如修改
slideInHorizontally的initialOffsetX参数控制滑动方向和距离。
内容的提问来源于stack exchange,提问作者sidpal7747
相关产品推荐
相关产品推荐

