Jetpack Compose detectTransformGestures использует все жесты
Я просмотрел следующий ответ, и он не сработал. Как использовать detectTransformGestures, но не использовать все события указателя.
Проблема : у меня есть LazyList, который мне нужно прокручивать по вертикали, дочерние составные элементы также можно перетаскивать по горизонтали и реагировать на нажатия и нажатия . Но я хочу, чтобы LazyList также был сжат или сжат, но при этом перехватывал жесты перетаскивания. Вот текущий код модификатора для существующих жестов:
/* LazyList child composable */
Modifier.pointerInput(myLock) {
detectDragGestures(
onDragEnd = {
if (fooBolean) {
stuffToDo()
},
onDrag = { change, dragAmount ->
draggingTheComposableLogic()
scope.launch {
/* Scrolling the lazylist using the state linked to it */
state.scroll {
scrollBy(-dragAmount.y)
}
}
}
)
}
.pointerInput(Unit) {
detectTapGesturesUnconsumed(
onTap = {
scope.launch {
val press = PressInteraction.Press(Offset.Zero)
clickInteraction.emit(press)
delay(150)
clickInteraction.emit(PressInteraction.Release(press))
}
}
)
}
Моя попытка : я попытался изменить исходный код для detectTransformGestures, чтобы удалить потребляемую часть, но это вообще не работает. Это работало для касания и перетаскивания, но не для жестов преобразования. Если я добавлю этот фрагмент кода для обнаружения увеличения и уменьшения масштаба (жест сжатия), то все остальное просто перестанет работать:
/* This surface is situated on top of the lazylist, i know it's overlaying it, but then if I add the pointerInput modifier to the lazylist, it also won't work, nothing works, it seems like this modifier keeps blocking until the pointers are lifted */
Surface(modifier = Modifier.fillMaxSize().alpha(0f)
.pointerInput(Unit) {
detectTransformGestures(
onGesture = { c, p, z, r ->
Log.e("f", "$z")
}
)
}
) {}
Есть ли способ обнаружить жест ONLY-ZOOM, не потребляя его, чтобы я мог нормально перехватывать другие жесты?