Модификатор onIndirectPointerGesture позволяет компоненту получать и обрабатывать события непрямого указателя высокого уровня, например, исходящие от сенсорной панели устройства. Используйте этот модификатор для захвата и обработки жестов, поступающих от сенсорной панели или аналогичного источника.
Поверхность API
Для управления обработкой событий ваше приложение может использовать четыре функции обратного вызова:
-
onClick: Срабатывает при успешном касании или щелчке без значительного горизонтального перемещения. -
onSwipeForward: Срабатывает, когда горизонтальное движение пальцем вперед превышает пороговое значение расстояния и скорости. -
onSwipeBackward: Срабатывает, когда горизонтальное движение пальцем в обратном направлении превышает пороговое значение расстояния и скорости. -
Enabled: Если установлено значениеfalse, модификатор игнорируется, и никакие функции обратного вызова не вызываются.
Системное поведение при пролистывании и прокрутке
Система использует пороговое значение касания для различения щелчка и свайпа.
- Если указатель мыши значительно смещается во время нажатия кнопки мыши,
onClickотменяется. - Если указатель значительно смещается назад во время движения, жест смахивания аннулируется.
Пример: Настройка обработки жестов свайпа и кликов по компоненту.
Следующий код настраивает обработку жестов смахивания и кликов по фокусируемому Box :
@Composable @Sampled fun OnIndirectPointerGestureSample() { Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { /* onSwipeForward */ }, onSwipeBackward = { /* onSwipeBackward */ }, onClick = { /* onClick */ }, ) .focusTarget() ) { // App() } }
Основные моменты, касающиеся кода.
-
onIndirectPointerGestureтребуется фокус, поэтому для того, чтобы сделатьBoxдоступным для фокусировки, также применяетсяfocusTarget. Вы можете использоватьfocusTargetили другой модификатор, позволяющий фокусироваться, напримерsurface. Без фокуса модификатор не сможет реагировать на события косвенного указателя. - В этом примере реализованы коллбэки
onSwipeForwardиonClick, поэтому обнаруженные жесты смахивания и щелчка перехватываются и обрабатываются, не распространяясь на родительские контейнеры. Однако вы также можете оставить определенный коллбэк пустым, чтобы передать жест модификаторуonIndirectPointerGestureв родительском контейнере.