Đố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ànhfalse, đố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,
onClicksẽ 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ã
onIndirectPointerGestureyêu cầu tiêu điểm, vì vậy,focusTargetcũng được áp dụng để làm choBoxcó thể lấy tiêu điểm. Bạn có thể dùngfocusTargethoặ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
onSwipeForwardvàonClick, 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 đổionIndirectPointerGesturetrong một vùng chứa mẹ. -