Смахивание перемещает к последней привязке, даже если палец не освобожден от управления смахиванием во время перетаскиваAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Смахивание перемещает к последней привязке, даже если палец не освобожден от управления смахиванием во время перетаскива

Сообщение Anonymous »

Я пытаюсь реализовать управление смахиванием в своем приложении, используя Compose BOM 2024.09.00.
В настоящее время при смахивании вправо, как только достигается пороговое значение (т. е. выполняется половина смахивания), элемент управления смахиванием перемещается в крайнее правое положение, когда состояние становится истинным. Я хочу, чтобы состояние смахивания не было истинным до тех пор, пока пользователь не отпустит пальцы, даже если пороговое значение пересечено, т. е. 0,5f.
У меня пока есть этот код:
@Composable
fun AnchoredDraggableExample(
handleSize: Dp = 100.dp,
onArrived: () -> Unit = { println("Arrived") },
) {
val handleSizePx = with(LocalDensity.current) { handleSize.toPx() }

BoxWithConstraints {
val maxWidthPx = constraints.maxWidth.toFloat()
val endPx = maxWidthPx - handleSizePx
val swipeState = remember {
AnchoredDraggableState(
initialValue = false
)
}

LaunchedEffect(endPx, swipeState.currentValue) {
swipeState.updateAnchors(
DraggableAnchors {
if (!swipeState.currentValue) {
false at 0f
}
true at endPx
},
)
}

// Trigger action when the state becomes 'true' (Arrived)
LaunchedEffect(swipeState.currentValue) {
if (swipeState.currentValue) {
onArrived()
}
}

val flingBehavior = AnchoredDraggableDefaults.flingBehavior(
state = swipeState,
positionalThreshold = { distance -> distance * 0.5f },
animationSpec = spring(
dampingRatio = Spring.DampingRatioLowBouncy,
stiffness = Spring.StiffnessLow,
),
)

Box(
modifier = Modifier
.offset {
// Safety check to ensure offset is read only after layout/initialization
val offset = try {
swipeState.requireOffset()
} catch (e: Exception) {
0f
}
IntOffset(offset.roundToInt(), 0)
}
.size(handleSize)
.padding(4.dp)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.primary)
.anchoredDraggable(
state = swipeState,
orientation = Orientation.Horizontal,
flingBehavior = flingBehavior,
),
contentAlignment = Alignment.Center,
) {
// My controls
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... pe-control
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»