Build apps faster with over 150+ styled components and screens! Check it out →

CircularProgressIndicatorStatic

Android

Component in Wear Material 3 Compose

[CircularProgressIndicatorStatic] is a non-animating circular progress indicator. Prefer to use [CircularProgressIndicator] directly instead of this overload in order to access the recommended animations, but this overload can be used when custom animations are required.

Last updated:

Installation

dependencies {
   implementation("androidx.wear.compose:compose-material3:1.0.0-alpha32")
}

Overloads

@Composable
fun CircularProgressIndicatorStatic(
    progress: () -> Float,
    modifier: Modifier = Modifier,
    allowProgressOverflow: Boolean = false,
    startAngle: Float = CircularProgressIndicatorDefaults.StartAngle,
    endAngle: Float = startAngle,
    colors: ProgressIndicatorColors = ProgressIndicatorDefaults.colors(),
    strokeWidth: Dp = CircularProgressIndicatorDefaults.largeStrokeWidth,
    gapSize: Dp = CircularProgressIndicatorDefaults.calculateRecommendedGapSize(strokeWidth),
    enabled: Boolean = true,
    overflowColorAlphaFraction: Float = 1f,
    targetProgress: (() -> Float)? = null,
): Unit

Parameters

namedescription
progressThe progress of this progress indicator where 0.0 represents no progress and 1.0 represents completion.
modifierModifier to be applied to the CircularProgressIndicator.
allowProgressOverflowWhen progress overflow is allowed, values smaller than 0.0 will be coerced to 0, while values larger than 1.0 will be wrapped around and shown as overflow with a different track color [ProgressIndicatorColors.overflowTrackBrush]. For example values 1.2, 2.2 etc will be shown as 20% progress with the overflow color. When progress overflow is not allowed, progress values will be coerced into the range 0..1.
startAngleThe starting position of the progress arc, measured clockwise in degrees (0 to 360) from the 3 o'clock position. For example, 0 and 360 represent 3 o'clock, 90 and 180 represent 6 o'clock and 9 o'clock respectively. Default is 270 degrees [CircularProgressIndicatorDefaults.StartAngle] (top of the screen).
endAngleThe ending position of the progress arc, measured clockwise in degrees (0 to 360) from the 3 o'clock position. For example, 0 and 360 represent 3 o'clock, 90 and 180 represent 6 o'clock and 9 o'clock respectively. By default equal to [startAngle].
colors[ProgressIndicatorColors] that will be used to resolve the indicator and track color for this progress indicator in different states.
strokeWidthThe stroke width for the progress indicator. The recommended values are [CircularProgressIndicatorDefaults.largeStrokeWidth] and [CircularProgressIndicatorDefaults.smallStrokeWidth].
gapSizeThe size (in Dp) of the gap between the ends of the progress indicator and the track. The stroke endcaps are not included in this distance.
enabledcontrols the enabled state. Although this component is not clickable, it can be contained within a clickable component. When enabled is false, this component will appear visually disabled.
overflowColorAlphaFractionAlpha fraction to apply to the overflow color. This can be used to implement animated transition from progress color to overflow color. For no animation should be set to 1.
targetProgressTarget value if the progress value is to be animated. Used to determine if the min progress values should be enforced. For no animation this should be null.

Code Example

CircularProgressIndicatorStaticSample

@Composable
fun CircularProgressIndicatorStaticSample() {
    val progress = remember { mutableFloatStateOf(0f) }
    val animatedProgress = remember { Animatable(0f) }

    LaunchedEffect(Unit) {
        snapshotFlow(progress::value).collectLatest {
            animatedProgress.animateTo(it, tween(durationMillis = 1024, easing = LinearEasing))
        }
    }

    Box(
        modifier =
            Modifier.background(MaterialTheme.colorScheme.background)
                .padding(CircularProgressIndicatorDefaults.FullScreenPadding)
                .fillMaxSize()
    ) {
        Button(
            modifier = Modifier.align(Alignment.Center).padding(12.dp),
            onClick = { progress.value = if (progress.value == 0f) 1f else 0f },
            label = { Text("Animate") },
        )

        // Since CircularProgressIndicatorStatic does not have any built-in progress animations,
        // we can implement a custom progress animation by using an Animatable progress value.
        CircularProgressIndicatorStatic(
            progress = animatedProgress::value,
            startAngle = 120f,
            endAngle = 60f,
        )
    }
}
by @alexstyl