อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
ตัวแก้ไข onIndirectPointerGesture ช่วยให้คอมโพเนนต์รับและตอบสนองต่อเหตุการณ์ตัวชี้ทางอ้อมระดับสูง เช่น เหตุการณ์ที่มาจากทัชแพดของอุปกรณ์ ใช้ตัวแก้ไขนี้เพื่อบันทึกและประมวลผลท่าทางสัมผัสที่มาจากทัชแพดหรือแหล่งที่มาที่คล้ายกัน
แพลตฟอร์ม API
มี Callback 4 รายการที่แอปของคุณใช้เพื่อควบคุมการจัดการได้ ดังนี้
onClick: ทริกเกอร์เมื่อแตะหรือคลิกสำเร็จโดยไม่มีการเคลื่อนไหวในแนวนอนอย่างมีนัยสำคัญonSwipeForward: ทริกเกอร์เมื่อการปัดในแนวนอนเกินเกณฑ์ระยะทางและความเร็วในทิศทางไปข้างหน้าonSwipeBackward: ทริกเกอร์เมื่อการปัดในแนวนอนเกินเกณฑ์ระยะทางและความเร็วในทิศทางย้อนกลับEnabled: เมื่อตั้งค่าเป็นfalseระบบจะไม่สนใจตัวแก้ไขและไม่มีการเรียกใช้ Callback
ลักษณะการทำงานของระบบสำหรับการปัดและการเลื่อน
ระบบใช้เกณฑ์ความคลาดเคลื่อนของการแตะเพื่อแยกความแตกต่างระหว่างการคลิกและการปัด
- หากตัวชี้เคลื่อนที่อย่างมีนัยสำคัญในสถานะกดลง ระบบจะยกเลิก
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หากไม่มีโฟกัส ตัวแก้ไขจะไม่สามารถดำเนินการกับเหตุการณ์ตัวชี้ทางอ้อมได้- ตัวอย่างนี้ใช้ทั้ง Callback
onSwipeForwardและonClickดังนั้นท่าทางการปัดและการคลิกที่ตรวจพบจะถูกสกัดกั้นและใช้ และไม่ส่งต่อไปยังคอนเทนเนอร์หลัก อย่างไรก็ตาม คุณยังสามารถปล่อยให้ Callback ที่เฉพาะเจาะจงเป็น Null เพื่อส่งผ่านท่าทางสัมผัสไปยังตัวแก้ไขonIndirectPointerGestureในคอนเทนเนอร์หลักได้ด้วย