הוספת משוב פיזי לאירועים

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

בדף הזה מתוארות שלוש דרכים לספק משוב פיזי.

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

כל השיטות למשוב הפיזי מכבדות את הגדרות משוב המגע של המשתמש על ידי כברירת מחדל.

שימוש ברכיבי View כדי ליצור משוב פיזי

משתמשים בשיטה View.performHapticFeedback כדי ליצור משוב פיזי. קבועים פיזיים שמוגדרים על ידי HapticFeedbackConstants מתמקדים הפונקציונליות באפליקציה, ולא סוג האפקט הפיזי המבוצע.

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

דרישות מוקדמות: הפעלת משוב פיזי

כל עוד ניתן לראות את View, אפשר להשתמש במשוב הפיזי כדי לתעד את האירועים שבו. אירועים מסוימים, כמו לחיצה ארוכה, כוללים משוב פיזי כברירת מחדל שמופעל אם המאזין בתצוגה מטפל באירוע (מחזיר true).

View Android יכול להשבית את המשוב הפיזי על ידי הגדרה של נכס 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 כפי שמוצג בדוגמאות הבאות.

מידע על התמיכה של VibrationEffect בממשקי API במכשירים

בשימוש בסיסי, לא צריך לבדוק אם יש תמיכה באנשים פרטיים ממשקי 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.

בדוגמה הזו פועל אפקט של קליק.

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 האלה מתואר בפירוט יצירת אפקטים קוליים בהתאמה אישית