Jetpack Compose 动画rememberInfiniteTransition

在 Jetpack Compose 中,rememberInfiniteTransition 是一个专为无限循环动画(如加载转圈、呼吸灯、骨架屏闪烁、脉冲光效等)设计的 API。

与前面提到的那些需要外部状态触发(如点击按钮、改变布尔值)的动画不同,rememberInfiniteTransition 会在组件进入组合(Composition)时自动开始播放,并按照配置无限循环下去。

一、 核心作用与特点

  1. 自动循环播放(无需状态触发)
    它不需要你定义 var isAnimating by remember { mutableStateOf(false) } 去手动触发。只要组件显示,它就开始转动或变化。
  2. 多属性协同循环
    和 updateTransition 类似,它是一个"容器",你可以在其中创建多个子动画(如 animateFloat、animateColor、animateValue),让尺寸、颜色、透明度等多个属性同时以无限循环的方式变化。
  3. 丰富的重复模式(RepeatMode)
    通过 infiniteRepeatable,你可以轻松控制动画的循环行为:
  • RepeatMode.Restart:动画播完后瞬间重置回起点,重新开始(适合旋转动画、进度条)。
  • RepeatMode.Reverse:动画播完后反向播放回到起点(适合呼吸灯、心跳缩放)。

二、 典型使用示例

以下代码展示了如何使用 rememberInfiniteTransition 实现一个带有缩放呼吸效果和颜色渐变的脉冲加载卡片:

复制代码
@Composable
fun PulsingLoadingBox() {
    // 1. 创建无限过渡容器
    val infiniteTransition = rememberInfiniteTransition(label = "InfiniteTransition")

    // 2. 创建大小/缩放的循环子动画
    val scale by infiniteTransition.animateFloat(
        initialValue = 0.9f,
        targetValue = 1.1f,
        animationSpec = infiniteRepeatable(
            animation = tween(durationMillis = 800, easing = FastOutSlowInEasing),
            repeatMode = RepeatMode.Reverse // 往返反转(变大然后变小)
        ),
        label = "ScaleAnimation"
    )

    // 3. 创建背景颜色的循环子动画
    val color by infiniteTransition.animateColor(
        initialValue = Color.Blue,
        targetValue = Color.Magenta,
        animationSpec = infiniteRepeatable(
            animation = tween(durationMillis = 1000),
            repeatMode = RepeatMode.Reverse
        ),
        label = "ColorAnimation"
    )

    // 4. 应用到 UI 组件
    Box(
        modifier = Modifier
            .size(100.dp)
            .scale(scale) // 应用缩放
            .background(color, shape = RoundedCornerShape(12.dp)),
        contentAlignment = Alignment.Center
    ) {
        Text(text = "Loading", color = Color.White)
    }
}
相关推荐
baidu_247438614 小时前
Android 自定义竖直的虚线
android
传奇开心果编程5 小时前
【Jetpack Compose娓娓道来】 第25课:ViewModel就是UI界面的大脑
android·kotlin·移动开发·jetpack compose·编程语言理论·编程框架·声明式ui
马立杰5 小时前
PHP 未授权 RCE 应急响应:CVE-2026-109618 CVE-2026-109619 排查与加固实战
android·开发语言·php
NamoAmitabha1285 小时前
安装“编译器环境”(Android Studio)--deepseek--Cocos --Creator3.8.8
android·ide·android studio
聚美智数6 小时前
文档转换 API‑文档转 PDF‑PDF 转文档‑异步文档处理‑文件格式迁移‑转换结果回调推送 API 接口介绍
android·java·pdf
booboosui7 小时前
Android 上的无人回合:只放开 2 类工具,宁可空手
android
事圆则缓9 小时前
Android 性能排查实战:怎么看内存抖动、CPU 占用和 FPS
android
mmsx9 小时前
Android 三类「看着无关」的故障:大事务、UI 阻塞与 ViewModel 作用域
android·ui
换元不配限9 小时前
Android 休眠与唤醒完全指南:从手机到 IoT 设备的实战解析
android·物联网·智能手机·alarmmanager·wakelock·workmanager·休眠和唤醒