Android Jetpack Compose CircularProgressIndicator 设置最小和最大进度

Android Jetpack Compose CircularProgressIndicator Set Min and Max Progress

我正在尝试设置 CircularProgressIndicator 的最小和最大进度,但我找不到任何解决方案。

这是给定的 可组合 CircularProgressIndicator:

@Composable
fun CircularProgressIndicator(
    /*@FloatRange(from = 0.0, to = 1.0)*/
    progress: Float,
    modifier: Modifier = Modifier,
    color: Color = MaterialTheme.colors.primary,
    strokeWidth: Dp = ProgressIndicatorDefaults.StrokeWidth
) {
    val stroke = with(LocalDensity.current) {
        Stroke(width = strokeWidth.toPx(), cap = StrokeCap.Butt)
    }
    Canvas(
        modifier
            .progressSemantics(progress)
            .size(CircularIndicatorDiameter)
            .focusable()
    ) {
        // Start at 12 O'clock
        val startAngle = 270f
        val sweep = progress * 360f
        drawDeterminateCircularIndicator(startAngle, sweep, color, stroke)
    }
}

它只接受 0.0 到 1.0 浮动范围内的进度我想将其更改为接受从 0 到 100 的值。

注:

我也发现了这个Modifier.progressSemantics但是我不知道怎么用它来改变进度范围

@Stable
fun Modifier.progressSemantics(
    value: Float,
    valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
    /*@IntRange(from = 0)*/
    steps: Int = 0
): Modifier {
    val progress = (
        if (valueRange.endInclusive - valueRange.start == 0f) 0f
        else (value - valueRange.start) / (valueRange.endInclusive - valueRange.start)
        ).coerceIn(0f, 1f)

    // We only display 0% or 100% when it is exactly 0% or 100%.
    val percent = when (progress) {
        0f -> 0
        1f -> 100
        else -> (progress * 100).roundToInt().coerceIn(1, 99)
    }

    return semantics {
        stateDescription = "$percent percent"
        progressBarRangeInfo =
            ProgressBarRangeInfo(value.coerceIn(valueRange), valueRange, steps)
    }
}

感谢任何帮助。

在您的情况下,您不需要更改进度范围。
只需将您的范围变成 0.0 - 1.0.

只需将进度值除以 60000。
1000/60000 = 0.016 每次报价。

如果你想反转计数,只需使用类似的东西:
val progress = 1 - (givenValueOnTick.toFloat / 60000)