RangeSliderSample
@Preview
@Composable
fun RangeSliderSample() {
val rangeSliderState =
rememberRangeSliderState(
0f,
100f,
valueRange = 0f..100f,
onValueChangeFinished = {
// launch some business logic update with the state you hold
// viewModel.updateSelectedSliderValue(sliderPosition)
},
)
Column(modifier = Modifier.padding(horizontal = 16.dp)) {
val rangeStart = "%.2f".format(rangeSliderState.activeRangeStart)
val rangeEnd = "%.2f".format(rangeSliderState.activeRangeEnd)
Text(text = "$rangeStart .. $rangeEnd")
RangeSlider(state = rangeSliderState)
}
}
RangeSliderWithCustomComponents
@OptIn(ExperimentalMaterial3Api::class)
@Preview
@Composable
fun RangeSliderWithCustomComponents() {
val rangeSliderState =
rememberRangeSliderState(
0f,
100f,
valueRange = 0f..100f,
onValueChangeFinished = {
// launch some business logic update with the state you hold
// viewModel.updateSelectedSliderValue(sliderPosition)
},
)
val startInteractionSource = remember { MutableInteractionSource() }
val endInteractionSource = remember { MutableInteractionSource() }
val startThumbAndTrackColors =
SliderDefaults.colors(thumbColor = Color.Blue, activeTrackColor = Color.Red)
val endThumbColors = SliderDefaults.colors(thumbColor = Color.Green)
Column(modifier = Modifier.padding(horizontal = 16.dp)) {
RangeSlider(
state = rangeSliderState,
startInteractionSource = startInteractionSource,
endInteractionSource = endInteractionSource,
startThumb = {
Label(
label = {
PlainTooltip(modifier = Modifier.sizeIn(45.dp, 25.dp).wrapContentWidth()) {
Text("%.2f".format(rangeSliderState.activeRangeStart))
}
},
interactionSource = startInteractionSource,
) {
SliderDefaults.Thumb(
interactionSource = startInteractionSource,
colors = startThumbAndTrackColors,
)
}
},
endThumb = {
Label(
label = {
PlainTooltip(
modifier = Modifier.requiredSize(45.dp, 25.dp).wrapContentWidth()
) {
Text("%.2f".format(rangeSliderState.activeRangeEnd))
}
},
interactionSource = endInteractionSource,
) {
SliderDefaults.Thumb(
interactionSource = endInteractionSource,
colors = endThumbColors,
)
}
},
track = { rangeSliderState ->
SliderDefaults.Track(
colors = startThumbAndTrackColors,
rangeSliderState = rangeSliderState,
)
},
)
}
}
StepRangeSliderSample
@Preview
@Composable
fun StepRangeSliderSample() {
val rangeSliderState =
rememberRangeSliderState(
0f,
100f,
valueRange = 0f..100f,
onValueChangeFinished = {
// launch some business logic update with the state you hold
// viewModel.updateSelectedSliderValue(sliderPosition)
},
// Only allow multiples of 10. Excluding the endpoints of `valueRange`,
// there are 9 steps (10, 20, ..., 90).
steps = 9,
)
Column(modifier = Modifier.padding(horizontal = 16.dp)) {
val rangeStart = rangeSliderState.activeRangeStart.roundToInt()
val rangeEnd = rangeSliderState.activeRangeEnd.roundToInt()
Text(text = "$rangeStart .. $rangeEnd")
RangeSlider(state = rangeSliderState)
}
}