จัดการอินพุตของตัวชี้ทางอ้อมใน Jetpack Compose Glimmer

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทต่างๆ
แว่นตาเสียงและ
แว่นตาแสดงผล

ตัวปรับเปลี่ยน onIndirectPointerGesture ช่วยให้คอมโพเนนต์รับและตอบสนอง ต่อเหตุการณ์ตัวชี้ระดับสูงแบบอ้อมได้ เช่น เหตุการณ์ที่มาจากทัชแพด ของอุปกรณ์ ใช้ตัวปรับเปลี่ยนนี้เพื่อบันทึกและประมวลผลท่าทางสัมผัสที่มาจากทัชแพดหรือแหล่งที่มาที่คล้ายกัน

แพลตฟอร์ม API

แอปของคุณสามารถใช้การเรียกกลับ 4 รายการต่อไปนี้เพื่อควบคุมการจัดการ

  • onClick: ทริกเกอร์เมื่อแตะหรือคลิกสำเร็จโดยไม่มีการเคลื่อนไหวในแนวนอนอย่างมีนัยสำคัญ
  • onSwipeForward: ทริกเกอร์เมื่อการปัดในแนวนอนเกินเกณฑ์ระยะทางและความเร็วในทิศทางไปข้างหน้า
  • onSwipeBackward: ทริกเกอร์เมื่อการปัดในแนวนอนเกินเกณฑ์ระยะทางและความเร็วในทิศทางย้อนกลับ
  • Enabled: เมื่อตั้งค่าเป็น false ระบบจะละเว้นตัวปรับเปลี่ยนและไม่เรียกใช้การเรียกกลับ

ลักษณะการทำงานของระบบสำหรับการปัดและการเลื่อน

ระบบใช้เกณฑ์ระยะทางต่ำสุดในการสัมผัสเพื่อแยกความแตกต่างระหว่างการคลิกและการปัด

  • หากตัวชี้เคลื่อนที่อย่างมีนัยสำคัญในระหว่างสถานะลง 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 หากไม่มีการโฟกัส ตัวปรับเปลี่ยนจะไม่สามารถดำเนินการกับเหตุการณ์ตัวชี้แบบอ้อมได้
  • ตัวอย่างนี้ใช้ทั้งการเรียกกลับ onSwipeForward และ onClick ดังนั้นระบบจะสกัดกั้นและใช้ท่าทางสัมผัสแบบปัดและคลิกที่ตรวจพบ และจะไม่ส่งต่อไปยังคอนเทนเนอร์ระดับบน อย่างไรก็ตาม คุณยังสามารถปล่อยให้การเรียกกลับที่เฉพาะเจาะจงเป็น Null เพื่อส่งท่าทางสัมผัสผ่านไปยังตัวปรับเปลี่ยน onIndirectPointerGesture ในคอนเทนเนอร์ระดับบนได้