Skip to content

Instantly share code, notes, and snippets.

@rozPierog
Created July 25, 2023 05:40
Show Gist options
  • Select an option

  • Save rozPierog/75db181481a0aabca5260488833c13fa to your computer and use it in GitHub Desktop.

Select an option

Save rozPierog/75db181481a0aabca5260488833c13fa to your computer and use it in GitHub Desktop.
@Preview
@Composable
fun AnaSlider() {
var slider0value by remember { mutableStateOf(0f) }
Slider(
valueRange = -50f..50f,
steps = 0,
value = slider0value,
onValueChange = { slider0value = it },
track = { sliderPositions ->
val inactiveTrackColor = MaterialTheme.colorScheme.surfaceVariant
val activeTrackColor = MaterialTheme.colorScheme.primary
Canvas(
Modifier
.fillMaxWidth()
.height(4.dp)
) {
val isRtl = layoutDirection == LayoutDirection.Rtl
val sliderCenter = Offset(size.width/2, center.y)
val sliderLeft = Offset(0f, center.y)
val sliderRight = Offset(size.width, center.y)
val sliderEnd = if (isRtl) sliderLeft else sliderRight
val trackStrokeWidth = 4.dp.toPx()
drawLine(
inactiveTrackColor,
sliderLeft,
sliderEnd,
trackStrokeWidth,
StrokeCap.Round
)
val sliderValueEnd = Offset(
sliderLeft.x +
(sliderEnd.x - sliderLeft.x) * sliderPositions.activeRange.endInclusive,
center.y
)
val sliderValueStart = Offset(
sliderCenter.x +
(sliderEnd.x - sliderCenter.x) * sliderPositions.activeRange.start,
center.y
)
drawLine(
activeTrackColor,
sliderValueStart,
sliderValueEnd,
trackStrokeWidth,
StrokeCap.Round
)
}
},
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment