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