אחד מתרחישי השימוש הבסיסיים ביותר של משוב פיזי הוא לספק משוב על אינטראקציות של משתמשים. בחירת זמן, לחיצה על מקש במקלדת וירטואלית ובחירת טקסט הן דוגמאות נפוצות לתרחישי שימוש טובים למשוב פיזי. למידע נוסף על מתי ואיך משתמשים בהפעלה מישושית, אפשר לקרוא את המאמר עקרונות לתכנון של הפעלה מישושית.
בדף הזה מתוארות שלוש דרכים לספק משוב מהותי.
- משתמשים ב-
View
(מומלץ). הגישה הזו מוכוונת לפעולה, היא נתמכת במגוון הרחב ביותר של מכשירים ואינה דורשת את ההרשאהVIBRATE
. - שימוש ב-
VibrationEffect
שהוגדר מראש. לגישה הזו יש יותר גמישות, אבל יש בה גם כמה חסרונות. - שימוש בהרכבות מתקדמות עם רכיבים בסיסיים. השיטה הזו חדשה יותר וגמישה יותר, אבל נדרשת תמיכה במכשירים ספציפיים.
השיטות האלה משתמשות בפרימיטיבים שמוגדרים ברמת המכשיר כדי לספק משוב באיכות גבוהה מותאם למכשיר הספציפי.
כברירת מחדל, כל השיטות של משוב הרטט מתייחסות להגדרות של משוב המגע של המשתמש.
שימוש ברכיבים של View
כדי ליצור משוב פיזי
משתמשים ב-method View.performHapticFeedback
כדי ליצור משוב פיזי. המשתנים הקבועים של האפקט הרטטני שמוגדרים על ידי HapticFeedbackConstants
מתמקדים בפונקציונליות שלהם באפליקציה, ולא בסוג האפקט הרטטני שמתבצע.
ההטמעה הבסיסית עשויה להשתנות בהתאם ליכולות של המכשיר והחומרה, אבל האפליקציה צריכה רק להחליט איזה משוב לספק בהקשר מסוים. כשמתמקדים בפונקציונליות, אפשר להפעיל משוב haptic לאינטראקציות דומות. עם הזמן, המשתמשים לומדים לשייך משמעויות שונות לחזיקות שונות.
תנאים מוקדמים: הפעלת משוב פיזי
כל עוד הסמל View
גלוי, אפשר להשתמש במשוב פיזי באירועים שלו.
לחלק מהאירועים, כמו לחיצה ארוכה, יש רטט ברירת מחדל שמופעל אם מאזין בתצוגה מטפל באירוע (מחזיר את הערך true
).
כדי להשבית את המשוב החזותי במכשיר Android View
, מגדירים את המאפיין View.hapticFeedbackEnabled
לערך false
. השבתת המאפיין הזה תוביל למשוב ברירת המחדל.
השיטה performHapticFeedback
מתייחסת גם להגדרת המערכת HAPTIC_FEEDBACK_ENABLED
, שמאפשרת למשתמש להשבית אותם במערכת כולה.
בניגוד לממשקי API אחרים של משוב מגע, השימוש ב-HapticFeedbackConstants
עם View
לא מחייב את ההרשאה VIBRATE
.
בוחרים HapticFeedbackConstant
כשמשתמשים ברכיבי View
עם HapticFeedbackConstants
, אין צורך להעריך את התמיכה במכשירים ספציפיים, כי למשתנים הקבועים האלה תהיה התנהגות חלופית במקרה הצורך. השיקול היחיד הוא רמת ה-SDK של הקבוע הרצוי.
דוגמה 1: הקשה על מקש
זוהי דוגמה לאופן שבו מוסיפים משוב מישוש לקלט מגע ב-View
באמצעות רכיבי מעקב מגע. האפקטים מדמים את התחושה של לחיצה על לחצן ואז שחרור שלו.
Kotlin
class HapticTouchListener : View.OnTouchListener { override fun onTouch(View view, MotionEvent event) : Boolean { when (event.actionMasked) { MotionEvent.ACTION_DOWN -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) MotionEvent.ACTION_UP -> view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE) } return true } }
Java
class HapticTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); break; case MotionEvent.ACTION_UP: view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE); break; } return true; } }
דוגמה 2: כפתור שליחה
תרחישים לדוגמה של משוב מישוש חורגים מסימולציה של אינטראקציה פיזית עם המכשיר. אפשר להשתמש בהם גם כדי להעביר משמעות מופשטת. לדוגמה, כשמשתמשים באפקט CONFIRM
, הציפייה היא לרטט קצר וקל, ואילו כשמשתמשים באפקט REJECT
, הציפייה היא למשוב חזק יותר כדי לסמן כשל. הדוגמה הבאה ממחישה את זה לגבי משוב על לחצן שליחה.
Kotlin
submitButton.setOnClickListener { view -> val successful = performSubmit() if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM) } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT) } }
Java
submitButton.setOnClickListener(view -> { boolean successful = performSubmit(); if (successful) { view.performHapticFeedback(HapticFeedbackConstants.CONFIRM); } else { view.performHapticFeedback(HapticFeedbackConstants.REJECT); } });
שימוש ב-VibrationEffect
מוגדר מראש כדי ליצור משוב פיזי
הגישה שמבוססת על View
מתמקדת באינטראקציה של המשתמש. מומלץ להשתמש בהם כדי לשמור על עקביות במערכת. עם זאת, אפשר גם להפעיל ממשקי VibrationEffect
API מוגדרים מראש כדי ליצור אפקטים מותאמים אישית של משוב חישתי.
אפקטים מוגדרים מראש זמינים כקבועים מסוג VibrationEffect
, וניתן לבדוק אם הם נתמכים ולהפעיל אותם באמצעות השירות Vibrator
, כפי שמתואר בדוגמאות הבאות.
הסבר על תמיכה במכשירים בממשקי API של VibrationEffect
בשימוש בסיסי, אין צורך לבדוק אם יש תמיכה בממשקי API ספציפיים של VibrationEffect
. ממשקי ה-API, כמו Vibrator.areEffectsSupported
ו-Vibrator.areAllEffectsSupported
, משמשים לקביעת אם במכשיר יש הטמעה בהתאמה אישית של הקבוע. אם אפקט מותאם אישית לא קיים, האפליקציה עדיין יכולה להפעיל את האפקטים ולהשתמש בהטמעת חלופי מוגדרת-פלטפורמה.
פרטים נוספים זמינים במאמר VibrationEffect
מוגדר מראש.
דרישות מוקדמות: צריך לטעון את הרטט ואת ההרשאה VIBRATE
אפשר להפעיל את רוב הרטט באמצעות השירות Vibrator
, שאפשר לטעון באופן הבא:
Kotlin
import android.os.Vibrator val vibrator = context.getSystemService(Vibrator::class.java)
Java
import android.os.Vibrator; Vibrator vibrator = context.getSystemService(Vibrator.class);
כדי שהאפליקציה תוכל להפעיל את הרטט במכשיר באמצעות השירות הזה, נדרשת לה ההרשאה VIBRATE
. אפשר להוסיף את ההרשאה לקובץ המניפסט של האפליקציה:
<uses-permission android:name="android.permission.VIBRATE"/>
הפעלת VibrationEffect
מוגדר מראש
אפשר להכין אפקטים מוגדרים מראש באמצעות VibrationEffect.createPredefined
, ואז להפעיל אותם באמצעות אחת מהשיטות vibrate
ב-Vibrator
.
בדוגמה הזו מופעל אפקט Click.
Kotlin
val vibrator = context.getSystemService(Vibrator::class.java) ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
Java
Vibrator vibrator = context.getSystemService(Vibrator.class); ... // Requires VIBRATE permission vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
שימוש בקומפוזיציות מתקדמות עם פרימיטיבים
ממשק ה-API של VibrationEffect.Composition
מציע אפשרויות נוספות למשוב הפיזי. עם זאת, בניגוד לאפקטים, לפרימיטיבים האלה אין חלופות ברמת המערכת, כך שצריך להקפיד על הפרימיטיבים ועל יכולות אחרות שנתמכות במכשיר.
מידע נוסף על השימוש בממשקי ה-API האלה זמין במאמר יצירת אפקטים של משוב מגע בהתאמה אישית.