Xử lý phương thức nhập bằng con trỏ gián tiếp trong Jetpack Compose Glimmer

Các thiết bị XR được hỗ trợ
Hướng dẫn này giúp bạn xây dựng các trải nghiệm cho những loại thiết bị XR sau.
Kính âm thanh và
kính hiển thị

Đối tượng sửa đổi onIndirectPointerGesture cho phép thành phần nhận và phản hồi các sự kiện con trỏ gián tiếp cấp cao, chẳng hạn như các sự kiện bắt nguồn từ bàn di chuột của thiết bị. Sử dụng đối tượng sửa đổi này để ghi lại và xử lý các cử chỉ đến từ bàn di chuột hoặc nguồn tương tự.

Nền tảng API

Ứng dụng của bạn có thể dùng 4 lệnh gọi lại để kiểm soát việc xử lý:

  • onClick: Kích hoạt khi người dùng nhấn hoặc nhấp thành công mà không có chuyển động ngang đáng kể.
  • onSwipeForward: Kích hoạt khi thao tác vuốt ngang vượt quá ngưỡng khoảng cách và vận tốc theo hướng tiến.
  • onSwipeBackward: Kích hoạt khi một thao tác vuốt ngang vượt quá ngưỡng khoảng cách và vận tốc theo hướng ngược.
  • Enabled: Khi được đặt thành false, đối tượng sửa đổi sẽ bị bỏ qua và không có lệnh gọi lại nào được gọi.

Hành vi của hệ thống khi vuốt và cuộn

Hệ thống sử dụng ngưỡng độ trễ khi chạm để phân biệt giữa thao tác nhấp và thao tác vuốt.

  • Nếu con trỏ di chuyển đáng kể trong trạng thái nhấn xuống, onClick sẽ bị huỷ.
  • Nếu con trỏ quay lại đáng kể trong quá trình di chuyển, thì cử chỉ vuốt sẽ không hợp lệ.

Ví dụ: Thiết lập thao tác xử lý cho cử chỉ vuốt và lượt nhấp vào một thành phần

Đoạn mã sau đây thiết lập hoạt động xử lý cho thao tác vuốt và nhấp vào một Box có thể lấy tiêu điểm:

@Composable
@Sampled
fun OnIndirectPointerGestureSample() {
    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { /* onSwipeForward */ },
                    onSwipeBackward = { /* onSwipeBackward */ },
                    onClick = { /* onClick */ },
                )
                .focusTarget()
    ) {
        // App()
    }
}

Các điểm chính về mã

  • onIndirectPointerGesture yêu cầu tiêu điểm, vì vậy, focusTarget cũng được áp dụng để làm cho Box có thể lấy tiêu điểm. Bạn có thể dùng focusTarget hoặc một đối tượng sửa đổi khác cho phép lấy tiêu điểm, chẳng hạn như surface. Nếu không có tiêu điểm, đối tượng sửa đổi sẽ không thể tác động lên các sự kiện con trỏ gián tiếp.
  • Ví dụ này triển khai cả lệnh gọi lại onSwipeForwardonClick, do đó, các cử chỉ vuốt và nhấp được phát hiện sẽ bị chặn và sử dụng, đồng thời không truyền ra các vùng chứa mẹ. Tuy nhiên, bạn cũng có thể để một lệnh gọi lại cụ thể là rỗng để truyền một cử chỉ thông qua một thành phần sửa đổi onIndirectPointerGesture trong một vùng chứa mẹ. -