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

如何在Activity启动时为Jetpack Compose组件添加入场动画?

实现Jetpack Compose启动时Text淡入动画

问题原因

直接用AnimatedVisibility(visible = true)没效果,是因为Compose初始渲染时状态就是true,动画需要状态从false到true的切换才会触发。

方案1:AnimatedVisibility + LaunchedEffect

初始把可见性设为false,组件加载后再切换为true,触发淡入:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        AppTheme {
            Surface(
                modifier = Modifier.fillMaxSize(),
                color = MaterialTheme.colorScheme.background
            ) {
                val isVisible = remember { mutableStateOf(false) }
                
                // 首次组合后触发状态切换,可选加延迟让动画更自然
                LaunchedEffect(Unit) {
                    delay(100)
                    isVisible.value = true
                }
                
                AnimatedVisibility(
                    visible = isVisible.value,
                    // 自定义淡入动画时长,这里设为1秒
                    enter = fadeIn(tween(1000))
                ) {
                    Text(text = "Message")
                }
            }
        }
    }
}

方案2:直接控制透明度动画

用animateFloatAsState控制Text的透明度从0到1,实现淡入:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        AppTheme {
            Surface(
                modifier = Modifier.fillMaxSize(),
                color = MaterialTheme.colorScheme.background
            ) {
                // 动画从0(完全透明)过渡到1(完全不透明),时长1秒
                val alpha = animateFloatAsState(
                    targetValue = 1f,
                    animationSpec = tween(1000),
                    initialValue = 0f
                )
                
                Text(
                    text = "Message",
                    modifier = Modifier.alpha(alpha.value)
                )
            }
        }
    }
}

额外提示

  • 想加更复杂的入场效果,比如淡入+从右侧滑入,可以在AnimatedVisibility的enter里组合动画:fadeIn() + slideInHorizontally(initialOffsetX = { it * 2 })
  • tween参数里可以加缓动曲线,比如tween(1000, easing = FastOutSlowInEasing)让动画更流畅

内容的提问来源于stack exchange,提问作者Narek Torosyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:05:25