NavHost 内可组合之间的 ExitAnimation

时间:2021-07-14 06:23:18

标签: android kotlin android-jetpack-compose

我在 jetpack compose 中玩 AnimatedVisibility 并发现退出动画不起作用,因为在动画开始之前可组合被破坏(?)。我在启用延迟的情况下对其进行了测试,以查看如果销毁延迟,动画是否有效,并且它有效。但它看起来不太好而且似乎是被迫的,此外它不适用于默认的 onBackPressed。这是我的代码:

NavHost(navController = navController, startDestination = startDestination) {
    composable() { // First Screen }
    composable(
        ...
    ) { navBackStackEntry ->

        val scope = rememberCoroutineScope()

        AnimatedVisibility(
            visibleState = remember { MutableTransitionState(!detailScreenIsVisible) }
                .apply { targetState = detailScreenIsVisible },
            enter = slideInHorizontally(
                initialOffsetX = { it / 4 }
            ),
            exit = slideOutHorizontally(
                targetOffsetX = { it / 4 }
            ),
        ) {
            DetailScreen(
                ...
                onNavigateUp = {
                    detailScreenIsVisible = false
                    scope.launch {
                        delay(10L)
                        navController.navigateUp()
                    }
                }
            )
        }
    }
}

对此有什么解决方法?

1 个答案:

答案 0 :(得分:2)

如果您查看 Google 文档中指向 Navigating with Compose 的链接,它会指出:

<块引用>

动画块不能与导航撰写一起使用。此功能请求中正在跟踪 Navigation Compose 中的过渡动画。

因此,Google 正在研究它,但尚未可用。您可以跟踪此功能的状态 here(我会不时检查)并等待动画广泛可用。与此同时,我发现了一个由 Johann Blake 编写的非常interesting article,它实现了自己的导航框架。他还使它能够在导航屏幕之间传递任何对象,从而避免了我们在导航组件中处理的捆绑限制。