Đố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
Có 4 lệnh gọi lại mà ứng dụng của bạn có thể dùng để kiểm soát việc xử lý:
onClick: Được 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: Sẽ 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: Được 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 lùi.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 độ dốc 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, thì
onClicksẽ bị huỷ. - Nếu con trỏ lùi lại đáng kể trong một chuyển động, thì cử chỉ vuốt sẽ không hợp lệ.
Ví dụ: Thiết lập cách xử lý thao tác vuốt và nhấp vào một thành phần
Đoạn mã sau đây thiết lập cách xử lý thao tác vuốt và nhấp vào một Box có thể làm tâm điểm:
@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") } }
Các điểm chính về mã
onIndirectPointerGesturecần có tiêu điểm, vì vậy,focusTargetcũng được áp dụng để đặt tiêu điểm choBox. Bạn có thể sử 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 không thể hành động dựa trê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, vì vậy, 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 tiếp cận được vùng chứa mẹ. Tuy nhiên, bạn cũng có thể để trống một lệnh gọi lại cụ thể để truyền cử chỉ đến đối tượng sửa đổionIndirectPointerGesturetrong vùng chứa mẹ.