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