zt
03/03/2025, 1:15 PMzt
03/03/2025, 1:21 PMprivate fun Slider(
value: Float,
onValueChange: (Float) -> Unit,
valueRange: ClosedFloatingPointRange<Float>,
brush: Brush
) {
Slider(
value = value,
onValueChange = onValueChange,
thumb = {
Box(
modifier = Modifier
.size(24.dp)
.background(Color.White, CircleShape)
)
},
track = {
Canvas(
modifier = Modifier
.widthIn(max = 900.dp)
.height(12.dp)
.fillMaxWidth()
) {
drawLine(
brush = brush,
start = Offset(0f, size.center.y),
end = Offset(size.width, size.center.y),
strokeWidth = size.height.dp.toPx(),
cap = StrokeCap.Round
)
}
},
valueRange = valueRange
)
}
val hue by remember(color) {
derivedStateOf {
color.hue
}
}
Slider(
value = hue,
onValueChange = {
color = Color.hsv(it, color.saturation, color.hsvValue)
},
valueRange = 0f..359f,
brush = Brush.horizontalGradient(
listOf(
Color.Red,
Color.Yellow,
Color.Green,
Color.Cyan,
Color.Blue,
Color.Magenta,
Color.Red
)
)
)
sorry about the awful formatting, I wish slack had a better way to import code without the indentromainguy
03/03/2025, 11:27 PMderivedStateOf
isn’t terribly useful since it will change almost (if not always) every time color
changes. And computing the hue isn’t expensive. You should just use color.hue
directly like you do for saturation and value