טיפול בקלט לא ישיר של מצביעים ב-Jetpack Compose Glimmer

מכשירי XR שמתאימים לשימוש
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים הבאים.
משקפי אודיו ותצוגה

המשנה onIndirectPointerGesture מאפשר לרכיב לקבל אירועים של מצביעים עקיפים ברמה גבוהה ולהגיב להם, כמו אירועים שמקורם בלוח המגע של המכשיר. משתמשים במחרוזת הזו כדי לתעד ולעבד תנועות שמגיעות ממשטח מגע או ממקור דומה.

פלטפורמת ה-API

יש ארבע פונקציות קריאה חוזרת שהאפליקציה יכולה להשתמש בהן כדי לשלוט בטיפול:

  • onClick: מופעל בלחיצה או בהקשה מוצלחת ללא תנועה אופקית משמעותית.
  • onSwipeForward: מופעלת כשהחלקה אופקית חורגת מסף המרחק והמהירות בכיוון קדימה.
  • onSwipeBackward: מופעלת כשהחלקה אופקית חורגת מסף המרחק והמהירות בכיוון לאחור.
  • Enabled: אם הערך הוא false, המערכת מתעלמת מהמגביל ולא מופעלות קריאות חוזרות (callback).

התנהגות המערכת בהחלקה ובגלילה

המערכת משתמשת בסף של תנועת החלקה כדי להבדיל בין לחיצה לבין החלקה.

  • אם מצביע העכבר זז באופן משמעותי בזמן שהלחצן לחוץ, הפעולה 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. אם אין מיקוד, אי אפשר להשתמש במאפיין הזה כדי להשפיע על אירועים עקיפים של הצבעה.
  • בדוגמה הזו מיושמים גם קריאות החזרה (callback) של onSwipeForward וגם של onClick, כך שמחוות של החלקה וקליק שמזוהות נחסמות ומועברות, ולא מגיעות אל מחוץ למאגרי התגים של ההורה. עם זאת, אפשר גם להשאיר קריאה חוזרת ספציפית כ-null כדי להעביר תנועת מגע לשינוי onIndirectPointerGesture במאגר נתונים ראשי. -