Порог Compose SwipeToDismiss игнорируется и выполняется действие, когда пользователь поднимает палец.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Порог Compose SwipeToDismiss игнорируется и выполняется действие, когда пользователь поднимает палец.

Сообщение Anonymous »

Я реализую SwipeToDismissBox с помощью Jetpack Compose Material 3. У меня есть два конкретных требования:
  • Пользовательский порог: действие смахивания должно запускаться, когда пользователь перетаскивает более 25 % ширины.
  • Время действия: функция (onRemove и onArchive) не должна выполняться немедленно при достижении порога пересек. Вместо этого ему следует подождать, пока пользователь не поднимет палец, анимация «отклонения» завершится и фон полностью не откроется.
В настоящее время, несмотря на установку позиционного порога на 0,25f, currentValue не меняется (и, следовательно, мой LaunchedEffect не срабатывает), пока я не перетащу хотя бы 50% ширины. Пользовательский порог, похоже, игнорируется.
Кроме того, я не уверен, как правильно обрабатывать поток анимации к действию. При попытке вызвать swipeToDismissBoxState.dismiss() анимация выполняется, но функция (onRemove или onArchive) не выполняется.

Код: Выделить всё

val thresholdPercent = 0.25f

val swipeToDismissBoxState = rememberSwipeToDismissBoxState(
positionalThreshold = { it * thresholdPercent },
)

LaunchedEffect(swipeToDismissBoxState.currentValue) {

println("SwipeToDismissBoxValue progress: ${swipeToDismissBoxState.progress}")

when (swipeToDismissBoxState.currentValue) {
SwipeToDismissBoxValue.EndToStart -> {
swipeToDismissBoxState.dismiss(SwipeToDismissBoxValue.EndToStart)
onRemove()
swipeToDismissBoxState.snapTo(SwipeToDismissBoxValue.Settled)
}

SwipeToDismissBoxValue.StartToEnd -> {
swipeToDismissBoxState.dismiss(SwipeToDismissBoxValue.StartToEnd)
onArchive()
swipeToDismissBoxState.snapTo(SwipeToDismissBoxValue.Settled)
}

SwipeToDismissBoxValue.Settled -> {}
}
}

SwipeToDismissBox(
state = swipeToDismissBoxState,
backgroundContent = {...}
}

Я не использую параметр onConfirmValue для RememberSwipeToDismissState, поскольку он устарел (версия моей библиотеки: composeBom = "2025.10.01")

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

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

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

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

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

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