我有以下设置为if else的视图,但我正在try 将视图设置为动画,以便在SomeView()之间有一个微妙的淡入淡出,它超级不稳定,不是很平滑.我看了文档,但我不清楚是否可以有if else分的视图,可以之间的动画?

有没有更好的方法来做这件事?

                    Column {
                        donationItems.forEach { item ->
                            AnimatedVisibility(
                                item.productId == productIdSelected
                            ){
                                SomeView()
                            }
                            AnimatedVisibility(
                                item.productId != productIdSelected
                                ) {
                                SomeView2()
                            }
                        }
                    }

推荐答案

如果要在If-Else语句中合成动画,建议使用AnimatedContent而不是AnimatedVisibility

不能将条件直接合并到If-Else语句中,因为要进行UI更改,必须有状态更改.因此,您应该创建一个具有所需初始值的MutableState,然后将其传递给AnimatedContent.每次需要设置不同的合成对象的动画时,都可以更改该状态的值.

var isProductSelected by remember{ mutableStateOf(false) }
Column {
    donationItems.forEach { item ->
        AnimatedContent(targetState = isProductSelected) {myState->
            if (myState == true ){ //  <-your condition
                SomeView()
            }else{
                SomeView2()
            }
        }
    }
}

确保在if语句中使用由AnimatedContent发出的值来处理条件(在上面的代码中为myState)

对于无jank动画, Select 合适的动画API至关重要. 对于无jank动画, Select 合适的动画API至关重要.参考有关合成动画的Android官方文档,做出明智的 Select :Choosing the right animation API.

Android相关问答推荐

有没有办法知道每台安卓设备上的通知限制?

不能有意地从一个活动的可组合功能转移到另一个活动

为什么它显示我的空白屏幕?

如何在Jetpack Compose中实现前后动画?

是否可以附加事件处理程序,如onClick,拖动到Canvas Composable中绘制的内容,或使用drawBehind修饰符?

学习Kotlin问题.无法理解Modifier参数

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

从不可组合回调打开可组合屏幕

错误:参数的类型必须是用@Entity注释的类或其集合/array. java.lang.String tocd);

Jetpack Compose 中的用户在线指示器

当 Jetpack Compose 中的第一个文本很长时,将省略号添加到第一个文本

如何从 firebase 实时数据库中检索最后一个值

为什么我要使用 $version 而不是2.7.0?

在 Jetpack Compose 中自动滚动后面的项目

如何在 Jetpack Compose 中设置行宽等于 TextField 的宽度?

找不到(包名称).在以下位置搜索:

如何只允许拖动 BottomSheetScaffold 中 BottomContent 的 SheetPeek 的一部分?

为什么我不能直接记住 mutableStateOf 可组合函数?

为 AlertDialog 的消息文本设置自定义字体

TextField 溢出和软包装不适用于 Compose 约束布局