Jetpack Compose Crossfade 在 Alpha 中被破坏
Jetpack Compose Crossfade broken in Alpha
自从 Compose Alpha 发布后,我的交叉淡入淡出动画不再有效,我非常感谢您的帮助,让它们再次工作。我是 Android/Compose 的新手。我知道 Crossfade 正在寻找其 targetState 中的状态变化以触发交叉淡入淡出动画,但我很困惑如何合并它。我正在尝试将某些可组合项包装在 Crossfade 动画中。
这是官方文档和有用的游乐场示例,但自从 Alpha 发布以来我仍然无法使用它
https://developer.android.com/reference/kotlin/androidx/compose/animation/package-summary#crossfade
https://foso.github.io/Jetpack-Compose-Playground/animation/crossfade/
这是我的代码,在这种情况下,我希望使用 String 当前路由本身作为 targetState 作为 mutableStateOf 对象。我愿意使用任何可行的方法。
@Composable
fun ExampleComposable() {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute: String? = navBackStackEntry?.arguments?.getString(KEY_ROUTE)
val exampleRouteTargetState = remember { mutableStateOf(currentRoute)}
Scaffold(
...
NavHost(navController, startDestination = "Courses") {
composable("Route") {
Crossfade(targetState = exampleRouteTargetState, animationSpec = tween(2000)) {
ExampleComposable1()
}
}
composable("Other Route")
ExampleComposable2()
}
)
...
}
导航不应该触发“exampleRouteTargetState”变量的状态变化,然后触发淡入淡出吗?如果您认为将可组合项包装在 NavHost 中可能会产生问题,我也可以将其包装在别处。非常感谢您的帮助!!
仍然没有让 Crossfade 再次工作,但我能够在 NavHost 中实现一些转换。希望这对某人有帮助。如果您想微调这些高级动画,请参阅以下文档:
https://developer.android.com/jetpack/compose/animation#animatedvisibility
@ExperimentalAnimationApi
@Composable
fun ExampleAnimation(content: @Composable () -> Unit) {
AnimatedVisibility(
visible = true,
enter = fadeIn(initialAlpha = 0.3f),
exit = fadeOut(),
content = content,
initiallyVisible = false
)
}
然后像这样用动画简单地包装 NavHost 可组合声明
NavHost(navController, startDestination = "A Route") {
composable(Screen.YourObject.Route) {
ExampleAnimation {
YourComposable()
}
}
最近 Google Accompanist 添加了一个库,它为 Jetpack Navigation Compose 提供 Compose Animation 支持。请检查一下。
https://github.com/google/accompanist/tree/main/navigation-animation
自从 Compose Alpha 发布后,我的交叉淡入淡出动画不再有效,我非常感谢您的帮助,让它们再次工作。我是 Android/Compose 的新手。我知道 Crossfade 正在寻找其 targetState 中的状态变化以触发交叉淡入淡出动画,但我很困惑如何合并它。我正在尝试将某些可组合项包装在 Crossfade 动画中。
这是官方文档和有用的游乐场示例,但自从 Alpha 发布以来我仍然无法使用它 https://developer.android.com/reference/kotlin/androidx/compose/animation/package-summary#crossfade https://foso.github.io/Jetpack-Compose-Playground/animation/crossfade/
这是我的代码,在这种情况下,我希望使用 String 当前路由本身作为 targetState 作为 mutableStateOf 对象。我愿意使用任何可行的方法。
@Composable
fun ExampleComposable() {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute: String? = navBackStackEntry?.arguments?.getString(KEY_ROUTE)
val exampleRouteTargetState = remember { mutableStateOf(currentRoute)}
Scaffold(
...
NavHost(navController, startDestination = "Courses") {
composable("Route") {
Crossfade(targetState = exampleRouteTargetState, animationSpec = tween(2000)) {
ExampleComposable1()
}
}
composable("Other Route")
ExampleComposable2()
}
)
...
}
导航不应该触发“exampleRouteTargetState”变量的状态变化,然后触发淡入淡出吗?如果您认为将可组合项包装在 NavHost 中可能会产生问题,我也可以将其包装在别处。非常感谢您的帮助!!
仍然没有让 Crossfade 再次工作,但我能够在 NavHost 中实现一些转换。希望这对某人有帮助。如果您想微调这些高级动画,请参阅以下文档: https://developer.android.com/jetpack/compose/animation#animatedvisibility
@ExperimentalAnimationApi
@Composable
fun ExampleAnimation(content: @Composable () -> Unit) {
AnimatedVisibility(
visible = true,
enter = fadeIn(initialAlpha = 0.3f),
exit = fadeOut(),
content = content,
initiallyVisible = false
)
}
然后像这样用动画简单地包装 NavHost 可组合声明
NavHost(navController, startDestination = "A Route") {
composable(Screen.YourObject.Route) {
ExampleAnimation {
YourComposable()
}
}
最近 Google Accompanist 添加了一个库,它为 Jetpack Navigation Compose 提供 Compose Animation 支持。请检查一下。
https://github.com/google/accompanist/tree/main/navigation-animation