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

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

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

แพลตฟอร์ม API

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

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

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

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

  • หากเคอร์เซอร์เคลื่อนที่อย่างมากในระหว่างสถานะลง ระบบจะonClickยกเลิก
  • หากเคอร์เซอร์ย้อนกลับอย่างมากในระหว่างการเคลื่อนไหว ระบบจะถือว่าท่าทางสัมผัสการปัด ไม่ถูกต้อง

ตัวอย่าง: ตั้งค่าการจัดการสำหรับการปัดและการคลิกในคอมโพเนนต์

โค้ดต่อไปนี้จะตั้งค่าการจัดการสำหรับการปัดและการคลิกใน Box ที่โฟกัสได้

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

ประเด็นสำคัญเกี่ยวกับโค้ด

  • onIndirectPointerGesture ต้องมีการโฟกัส ดังนั้นจึงมีการใช้ focusTarget เพื่อให้ Box โฟกัสได้ด้วย คุณใช้ focusTarget หรือตัวแก้ไขอื่นๆ ที่เปิดใช้โฟกัส เช่น surface ได้ หากไม่มีโฟกัส ตัวปรับแต่ง จะดำเนินการกับเหตุการณ์ของเคอร์เซอร์ทางอ้อมไม่ได้
  • ตัวอย่างนี้ใช้ทั้งแฮนเดิล onSwipeForward และ onClick ดังนั้นระบบจะสกัดกั้นและใช้ท่าทางการปัดและคลิกที่ตรวจพบ และจะไม่ส่งต่อไปยังคอนเทนเนอร์ระดับบน อย่างไรก็ตาม คุณยังปล่อยให้ การเรียกกลับที่เฉพาะเจาะจงเป็น Null เพื่อส่งต่อท่าทางสัมผัสไปยังตัวแก้ไข onIndirectPointerGesture ในคอนเทนเนอร์หลักได้ด้วย -