Jetpack Compose Glimmer에서 간접 포인터 입력 처리

적용 가능한 XR 기기
이 가이드에서는 이러한 유형의 XR 기기를 위한 환경을 빌드하는 방법을 설명합니다.
오디오 및
디스플레이 안경

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