You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:57:08