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에는 포커스가 필요하므로focusTarget도 적용되어Box포커스 가능하게 됩니다.focusTarget또는 다른 포커스 사용 설정 수정자를surface사용할 수 있습니다. 포커스가 없으면 수정자가 간접 포인터 이벤트에 영향을 줄 수 없습니다.- 이 예에서는
onSwipeForward및onClick콜백을 모두 구현하므로 감지된 스와이프 및 클릭 동작이 가로채기되고 사용되며 상위 컨테이너로 전달되지 않습니다. 하지만 특정 콜백을 null로 두어 동작을 상위 컨테이너의onIndirectPointerGesture수정자로 전달할 수도 있습니다. -