onIndirectPointerGesture 수정자를 사용하면 구성요소가 기기의 터치패드에서 발생하는 이벤트와 같은 상위 수준의 간접 포인터 이벤트를 수신하고 이에 응답할 수 있습니다. 이 수정자를 사용하여 터치패드 또는 유사한 소스에서 발생하는 동작을 캡처하고 처리합니다.
API 노출 영역
앱에서 처리를 제어하는 데 사용할 수 있는 콜백은 네 가지입니다.
onClick: 큰 수평 이동 없이 탭 또는 클릭이 성공하면 트리거됩니다.onSwipeForward: 가로 스와이프가 정방향으로 거리 및 속도 기준점을 초과할 때 트리거됩니다.onSwipeBackward: 가로 스와이프가 뒤로 방향으로 거리 및 속도 기준점을 초과할 때 트리거됩니다.Enabled:false로 설정하면 수정자가 무시되고 콜백이 호출되지 않습니다.
스와이프 및 스크롤에 관한 시스템 동작
시스템은 터치 슬롭 기준점을 사용하여 클릭과 스와이프를 구분합니다.
- 다운 상태에서 포인터가 크게 움직이면
onClick가 취소됩니다. - 이동 중에 포인터가 크게 역추적되면 스와이프 동작이 무효화됩니다.
예: 구성요소의 스와이프 및 클릭 처리 설정
다음 코드는 포커스 가능한 Box에서 스와이프 및 클릭 처리를 설정합니다.
@Composable fun OnIndirectPointerGestureSample() { var lastGesture by remember { mutableStateOf("None") } Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { lastGesture = "Forward" }, onSwipeBackward = { lastGesture = "Backward" }, onClick = { lastGesture = "Click" }, ) .focusTarget(), contentAlignment = Alignment.Center, ) { Text("Last Gesture: $lastGesture") } }
코드에 관한 핵심 사항
onIndirectPointerGesture에는 포커스가 필요하므로focusTarget도 적용되어Box에 포커스를 지정할 수 있습니다.focusTarget또는surface와 같은 다른 포커스 사용 설정 수정자를 사용할 수 있습니다. 포커스가 없으면 수정자는 간접 포인터 이벤트에 반응할 수 없습니다.- 이 예에서는
onSwipeForward콜백과onClick콜백을 모두 구현하므로 감지된 스와이프 및 클릭 동작이 가로채기 및 사용되고 상위 컨테이너에 도달하지 않습니다. 하지만 특정 콜백을 null로 남겨두어 상위 컨테이너의onIndirectPointerGesture수정자에 동작을 전달할 수도 있습니다.