Fix SeekBar behavior

This commit is contained in:
vfsfitvnm
2022-06-10 21:13:48 +02:00
parent 3a1e07e58d
commit 2c4e3b772b

View File

@@ -26,7 +26,7 @@ fun SeekBar(
onDragEnd: () -> Unit, onDragEnd: () -> Unit,
color: Color, color: Color,
backgroundColor: Color, backgroundColor: Color,
modifier: Modifier, modifier: Modifier = Modifier,
barHeight: Dp = 3.5.dp, barHeight: Dp = 3.5.dp,
scrubberColor: Color = color, scrubberColor: Color = color,
scrubberRadius: Dp = 6.dp, scrubberRadius: Dp = 6.dp,
@@ -47,9 +47,10 @@ fun SeekBar(
} }
.pointerInput(minimumValue, maximumValue) { .pointerInput(minimumValue, maximumValue) {
if (maximumValue < minimumValue) return@pointerInput if (maximumValue < minimumValue) return@pointerInput
detectTapGestures( detectTapGestures(
onPress = { offset -> onPress = { offset ->
onDragStart((offset.x / size.width * (maximumValue - minimumValue)).roundToLong()) onDragStart((offset.x / size.width * (maximumValue - minimumValue) + minimumValue).roundToLong())
}, },
onTap = { onTap = {
onDragEnd() onDragEnd()
@@ -63,7 +64,7 @@ fun SeekBar(
val scrubberPosition = if (maximumValue < minimumValue) { val scrubberPosition = if (maximumValue < minimumValue) {
0f 0f
} else { } else {
(value.toFloat() + minimumValue) / (maximumValue - minimumValue) * size.width (value.toFloat() - minimumValue) / (maximumValue - minimumValue) * size.width
} }
drawCircle( drawCircle(
@@ -84,7 +85,7 @@ fun SeekBar(
Spacer( Spacer(
modifier = Modifier modifier = Modifier
.height(barHeight) .height(barHeight)
.fillMaxWidth((value.toFloat() + minimumValue) / (maximumValue - minimumValue)) .fillMaxWidth((value.toFloat() - minimumValue) / (maximumValue - minimumValue))
.background(color = color, shape = shape) .background(color = color, shape = shape)
) )
} }