Wavy Progress:波形进度不是 LoadingIndicator · AndroidX 源码指南
AAndroidX 源码指南
M3E 设计系统
M3E 设计系统 · androidx.compose.material3

Wavy Progress:波形进度不是 LoadingIndicator1.5.0-alpha25

区分线性/环形波形进度与形状加载指示器,正确选择 determinate 和 indeterminate 版本。

最后更新 2026-08-01

Wavy 进度动效

环形 Wavy 动效

两种组件解决不同问题

LoadingIndicator 在多个 polygon 之间变化;Wavy Progress 保留线性或环形进度轨道,但活动部分使用波形表达。它们都能表现进度,却不是互换皮肤。

catalog 当前包含:

  • LinearWavyProgressIndicator
  • IndeterminateLinearWavyProgressIndicator
  • CircularWavyProgressIndicator
  • IndeterminateCircularWavyProgressIndicator

选择规则

  • 有真实比例:传 progress = { value }
  • 无法计算比例:使用不带 progress 的 indeterminate overload。
  • 文件传输、步骤完成度:通常选 determinate。
  • 很短的等待:避免闪一下就消失的指示器。

与普通 Progress 的关系

同一 ProgressIndicator.kt 仍保留普通 Linear/Circular API。是否使用 wavy 应由信息层级决定,不要为了“更 Expressive”让所有后台任务都持续抢注意力。

复制即用

线性与环形波形进度:

import androidx.compose.material3.CircularWavyProgressIndicator
import androidx.compose.material3.IndeterminateLinearWavyProgressIndicator
import androidx.compose.material3.LinearWavyProgressIndicator
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue

@Composable
fun LinearDeterminate() {
    var progress by remember { mutableFloatStateOf(0.6f) }

    LinearWavyProgressIndicator(progress = { progress })
}

@Composable
fun LinearIndeterminate() {
    IndeterminateLinearWavyProgressIndicator()
}

@Composable
fun CircularDeterminate() {
    var progress by remember { mutableFloatStateOf(0.6f) }

    CircularWavyProgressIndicator(progress = { progress })
}

有真实比例用 determinate;无法计算比例用 indeterminate 版本。