【问题标题】:Jetpack Compose recomposition animationJetpack Compose 重组动画
【发布时间】:2021-09-10 13:00:24
【问题描述】:

有没有什么简单的方法可以让 Composable 出现/隐藏? 我尝试使用 AnimatedVisibility 和 AnimatedContent 来实现这一点,但在我的特定情况下,它看起来相当麻烦。 屏幕上的内容是动态的,取决于变量的值,当改变这个变量时,我需要用动画显示/隐藏对应的 Composables。

contentType.forEach { type ->
                when (type) {
                    ContentType.Type1 -> {
                        ComposableForType1()
                    }
                    ContentType.Type2 -> {
                        ComposableForType2()
                    }
                    ContentType.Type3 -> {
                        ComposableForType3()
                    }
                    ContentType.Type4 -> {
                        ComposableForType4()
                    }
                }
}
// Some logic to change the content type

【问题讨论】:

  • AnimatedVisibility 是正确的方法,添加你如何使用它的代码,并描述你期望什么以及什么不能正常工作
  • @PhilipDukhov,我不完全理解如何处理“可见”变量,因为它控制所有内容的可见性。这是code

标签: android android-animation android-jetpack-compose


【解决方案1】:

您可以使用AnimatedVisibility 显示/隐藏一个特定视图。

如果您想在不同视图之间为某些状态设置动画,可以使用Crossfade 动画:

Crossfade(targetState = type) { type ->
    when (type) {
        ContentType.Type1 -> {
            ComposableForType1()
        }
        ContentType.Type2 -> {
            ComposableForType2()
        }
        ContentType.Type3 -> {
            ComposableForType3()
        }
        ContentType.Type4 -> {
            ComposableForType4()
        }
    }
}

如果type是一个普通的可变值,这个方法肯定会起作用。

我不确定它是否适用于您的情况,因为您还有一组数据。如果只更改数组中的值,Crossade 会起作用,但如果同时添加或删除元素,则此动画将难以实现。

documentation中查看更多关于 Compose 动画的信息

【讨论】:

  • 总的来说,我设法实现了动画。但很遗憾,我不得不将自己限制在“交叉淡入淡出”动画中。我设法追踪了一个变量的嵌套值,我不知道它有多优雅,但是it 有效
  • @TimYumalin 如果视觉部分不是您想要的,您可以指定animationSpec
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多