أساس تجربة المستخدم لإطار العمل باللمس

تستند جميع تحسينات إطار عمل Android المستندة إلى تقنية اللمس إلى مجموعة من مبادئ تجربة المستخدم التي تتطوّر بمعدل متساوٍ. تشمل مبادئ التصميم الحالية استبدال الاهتزازات المزعجة بـ اللمسات الواضحة، ومحاولة استكشاف اللمسات الغنية.

مبادئ تجربة المستخدم

الشكل 1: المبادئ الحالية

يسرد الجدول التالي جميع واجهات برمجة التطبيقات المتاحة لللمس.

واجهة برمجة التطبيقات الطرق السنة التي تمت فيها الإضافة
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • ساعة_ساعة
  • المفتاح VIRTUAL_KEY
  • KEYBOARD_TAP
  • LONG_PRESS
قبل عام 2016
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Android 8)
  • تأكيد
  • إغلاق
  • GESTURE_START
  • GESTURE_END
‫2020 (Android 11)
android.View
  • performHapticFeedback()‎
قبل عام 2016
android.os.Vibrator
  • vibrate()
  • hasVibrator()
قبل عام 2016
  • hasAmplitudeControl()
‫2017 (Android 8)
  • areAllEffectssupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
‫2020 (Android 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • تأثير_HEAVY_النقر
  • EFFECT_DOUBLE_CLICK
  • createPredefined()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • compose()
2020 (نظام التشغيل Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (Android 10)

الاهتزاز عند التفاعل

منذ ظهور أجهزة إرسال الرسائل القصيرة والهواتف العادية، تم استخدام الاهتزازات المنخفضة الجودة والموفرة للطاقة والتي تعمل باستخدام آلة التنبيه كبديل للرنين الصوتي في الوضع الصامت. إنّ مكونات الأجهزة القديمة التي تُصدر ضوضاء مسموعة عالية وغير سارة يمكن أن تلحق الضرر بتجربة المستخدم باللمس من خلال توفير مرات ظهور منخفضة الجودة (على سبيل المثال، هاتف مكسور زهيد التكلفة).

لمسات واضحة

تساعد تقنية اللمس الواضح في الإحساس بالتغيّرات المنفصلة في الحالة (على سبيل المثال، التغييرات الثنائية أثناء عملية تشغيل/إيقاف الطاقة). بسبب طبيعة ميزة التفاعل المفصّلة، يتم إنشاء لمسات واضحة ككيان واحد (مثل تأثير لمسي واحد لكل حدث إدخال).

يهدف Android إلى توفير لمسات واضحة مع أحاسيس قوية ودقيقة بدلاً من الأحاسيس المزعجة أو غير الواضحة.

تشمل العوامل الثابتة المحدَّدة مسبقًا لللمس التي تم إنشاؤها لدعم اللمس الواضح ما يلي:

في HapticFeedbackConstants:

  • CLOCK_TICK
  • CONFIRM
  • CONTEXT_CLICK
  • GESTURE_END
  • GESTURE_START
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • KEYBOARD_TAP
  • LONG_PRESS
  • REJECT
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY
  • VIRTUAL_KEY_RELEASE

في VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

إنّ تبادل المعرفة بين المصنّعين والمطوّرين هو أمر أساسي لمحاولة تحسين الجودة العامة لللمس في منظومة Android المتكاملة. استخدِم قائمة التحقق الأساسية وتقييم الأجهزة وCDD لمعرفة المزيد من المعلومات حول التنفيذ باللمس.

الضغط ثم الرفع

الشكل 3: الضغط والإفلات

ميزات التجاوب الحسّي الغنية

اللمسات المميّزة هي فئة متنامية من اللمسات تتجاوز تأثيرات الاستناد إلى النبضات الفردية. يهدف Android إلى توفير تجارب لمس ثرية مع إمكانية تركيبها وتعديلها بدقة عالية. يمكن استخدام حالات الاستخدام التالية في الإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم.

تقنية اللمس الغنية

الشكل 4: تقنية لمس ثرية مع ملمس انسيابي

السحب والتمرير

الشكل 5. السحب والتمرير

حالة الاستخدام 1: نسيج منزلق

إذا كان يتم تكرار تأثير لمسي أثناء تمرير الإصبع على سطح لمسي (مثل التمرير السريع أو التمرير السريع أو استكشاف السطح باستخدام نسيج لمسي وهمي)، يُفضَّل أن تكون التأثيرات المتكررة للمس دقيقة وواضحة.

إذا كان التأثير الفردي صاخبًا بدلاً من أن يكون واضحًا، من المحتمل أن يتم محو الفواصل الزمنية بين تكراراته. والنتيجة هي صوت طنين واحد طويل بدلاً من إشارات متعددة منفصلة.

إذا لم يكن السعة خفيفًا بما يكفي، تتراكم الطاقة الحسّية الملموسة من خلال التكرار، مما ينتج عنه تقنية لمس قوية للغاية في نهاية التكرار.

استخدام ملمس بسيط على السطح للإيماءات المتعلقة بالتمرير السريع والسحب

استخدِم CLOCK_TICK وTEXT_HANDLE_MOVE في HapticFeedbackConstants. وتحدِّد هذه الثوابت مسبقًا خصائص التكرار والسعة.

إنشاء التأثير الخاص بك

لإنشاء تأثير خاص بك، يمكنك إنشاء تصميم من خلال تسلسل PRIMITIVE_CLICK وPRIMITIVE_TICK في VibrationEffect.Composition. يمكنك تعديل خصائص التكرار ومقياس السعة باستخدام addPrimitive(int primitiveID, float scale, int delay). يعتمد الدعم على CAP_COMPOSE_EFFECTS إمكانيات واجهة HAL الخاصة بالهزّاز.

حالة الاستخدام 2: اهتزاز طويل مع تأثير تسهيل الدخول

الاهتزاز الطويل هو اهتزاز سعة سلس ينتقل من 0 إلى السعة المستهدَفة. يمكن أن تؤدي الاهتزازات الطويلة إلى توليد إحساسات لمسية ملفتة للانتباه يسهل إدراكها. ومع ذلك، يمكن أن يفاجئ الاهتزاز الطويل المفاجئ المستخدمين في بيئة هادئة، وغالبًا ما ينتج عنه ضوضاء صاخبة. لإنشاء اهتزاز طويل أكثر راحة، طبِّق تأثير تسهيل البداية في بداية الاهتزاز الطويل. يؤدي ذلك إلى إنشاء انتقال سلس للسعة يتطور نحو السعة المستهدَفة.

تطبيق تأثير "التدرّج في السرعة"

  1. تحقَّق من إمكانات الجهاز للتحكّم في الشدة باستخدام android.os.Vibrator.hasAmplitudeControl().

    • يجب أن تكون النتيجة true لإنشاء تأثير تسهيل الدخول مع معدّل اتّساع متغيّر.
  2. استخدِم VibrationEffect.createWaveform(timings[], amplitudes[], int repeat).

  3. عدِّل سلسلة timings[] وamplitudes[] لإنشاء منحنى التخفيف، كما هو موضّح في الشكل 6.

اهتزاز طويل

الشكل 6: منحنى تسهيل بدء الاهتزاز الطويل

حالة الاستخدام 3: اللمس المرتبط بالصوت

اللمس المرتبط بالصوت هو أنماط لمس مقترنة بإيقاع الصوت لجذب انتباه المستخدم.

تقنية اللمس المزوّدة بصوت: المزايا

لتنفيذ تقنية اللمس المقترنة بالاقتران الصوتي، ادمج تقنية اللمس الواضحة مع الاهتزازات الطويلة. توفّر اللمسات القوية ولكن القصيرة من تقنية اللمس الواضح أنماطًا متقطعة للإيقاع. عند الجمع بين هذه المحفزات والمستويات العالية من المحفزات التي يوفرها الاهتزاز الطويل، ينجح في جذب انتباه المستخدم.

من المهم مراعاة الأنماط الإيقاعية للشعور. إذا لم يكن هناك إحساس بالإيقاع، فإن المستخدم يدرك الأحاسيس الحسية على أنها اهتزازات عشوائية، ويميل إلى تجاهلها.

زوجان صوتيان

الشكل 7. مثال على التجاوب الحسّي الصوتي للزوج

ميزات التجاوب الصوتي المقترنة بالاقتران مع الصوت: نصائح للتنفيذ

يتطلّب تنفيذ ميزة "اللمس المرتبط بالصوت" فهمًا أساسيًا لتشغيل المحتوى في كلّ من قنوات الصوت واللمس. ضع الأمور التالية في اعتبارك.

  • استخدِم فئة MediaPlayer أو SoundPool.

    • تشير مواد العرض بتنسيق OGG التي تحتوي على مفتاح بيانات وصفية خاص (ANDROID_HAPTIC متبوعًا بعدد من قنوات اللمس) إلى توفّر بيانات اللمس وإمكانية التشغيل باستخدام MediaPlayer وSoundPool.
  • حدِّد إمكانية استخدام ميزة "اللمسات التفاعلية" وتشغيل الصوت في audio_policy_configuration.xml.

    • استخدِم ملفًا شخصيًا للمخرجات مع قناة اللمس AUDIO_CHANNEL_OUT_HAPTIC_A|B.
    • بالنسبة إلى مصدر بيانات الإخراج الذي يتضمّن قنوات لمسية، تذكَّر أنّه يتم عرض القنوات اللمسية كقنوات إضافية في البيانات.

    مثال

    إذا كان قناع القناة لمصدر البث يبدو على النحو التالي:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    بعد ذلك، من المفترض أن تظهر كل عيّنة على النحو التالي:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • غيِّر AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) إلى false لتشغيل قناة اللمس.

    • بشكل تلقائي، يتم كتم صوت القنوات التي تعمل باللمس (true).
    • وتشمل حالات الاستخدام نغمات الرنين وأصوات واجهة المستخدم مع ميزات اللمس والملاحظات المتزامنة.
  • يجب أن ينفِّذ واجهة برمجة التطبيقات لجهاز الهزّر ميزة التحكّم الخارجي.

ميزة "اللمس المرتبط بالصوت"

الشكل 8: تنفيذ تقنية لمس مزوّدة بصوت

التجاوب الحسّي المرتبط بالصوت: أداة إنشاء التأثيرات الصوتية

HapticGenerator هو تأثير صوتي تم طرحه في Android 12 ويمكنه إنشاء بيانات لمسية من قناة صوتية وتشغيلها في الوقت الفعلي كلمسة مرتبطة بالصوت. يتم تطبيق التأثير على AudioTrack كما هو موضح في الشكل 9.

بنية أداة إنشاء اللمس

الشكل 9: بنية أداة إنشاء اللمس

للتأكّد من أنّ خوارزمية إنشاء اللمس تُنشئ لمسات عالية الجودة، عليك ضبط خوارزمية الإنشاء على محرّك الهزاز في الجهاز من خلال تعديل المَعلمات التي تحدّد سلسلة الفلاتر التي تُطبّقها على أشكال الموجات الصوتية. يوضّح هذا القسم هذه المَعلمات بالتفصيل، ويشرح كيفية ضبطها وفقًا لمواصفات الجهاز.

  1. التردد الرنان لفلتر تمرير النطاق

    تردد رنان الهزّاز هو التردد الذي يُحقق به المشغِّل باللمس الحد الأقصى لإخراجه. تعمل هذه المَعلمة على ضبط مُعاكس للمرنان بهدف تسطيح دالة نقل الاستجابة جزئيًا، وذلك للحصول على نطاق تردد أوسع. يربط إطار عمل Android هذه القيمة تلقائيًا بمخرجات IVibrator.getResonantFrequency، وهي طريقة HAL الخاصة بالاهتزاز.

    القيمة التلقائية لهذه المَعلمة هي 150 هرتز. يمكن تعديل ذلك في الرمز هنا.

  2. تأثير التسويّة في المغلّف البطيء

    تحدِّد هذه المَعلمة الأس في التسويف الجزئي (التحكّم التلقائي في الكسب). وقيمته التلقائية -0.8، ما يعني أنّه تمت إزالة% 80 من تغيير النطاق الديناميكي من خلال خطوة التحكّم في الاكتساب هذه. يمكن تعديل ذلك في الرمز هنا.

  3. عامل Q لفلتر التوقف النطاقي

    يتم تحديد عامل جودة الهزّاز (عامل Q) من خلال مَعلمتَين:

    • معامل Q الصفري، وهو عامل الجودة للأصفار في فلتر التوقف النطاقي الذي يلغي الرنين جزئيًا.

    • Q للقطب، وهو عامل جودة الأقطاب في فلتر التوقف النطاقي

    تحدّ نسبة هاتين القيمتَين من قمع الرنين من أجل تعزيز الترددات المنخفضة وتوسيع نطاق استجابة الخوارزمية. على سبيل المثال، تؤدي القيم التلقائية 8 لمعامل Q الصفري و4 لمعامل Q للقطب إلى توليد نسبة 2، ما يحدّ من قمع الرنين بمقدار 2 (6 ديسيبل). يربط إطار عمل Android كلا القيمتَين بمخرج IVibrator.getQFactormethod في واجهة HAL الخاصة بالاهتزاز.

    إذا لم تراعي القيم التلقائية ضعف قوة الحركة في جهازك، ننصحك بتعديل كلتا القيمتين في الوقت نفسه، ورفعهما أو تقليلهما. يجب أن تكون نسبة Q الصفري إلى Q للقطب أكبر من 1. ويمكن تعديل هذا الخيار في الرمز هنا.

  4. التردد الحدّي للتشويش

    يتم تطبيق تردد الزاوية من خلال فلتر تمرير منخفض يعمل على تقليل الاهتزازات ذات المستوى المنخفض وتحسين المستويات الأعلى باستخدام تشويه ثلاثي الأبعاد. القيمة التلقائية هي 300 هرتز. يمكن تعديل ذلك في الرمز هنا.

  5. زيادة الإدخال والحدّ الأدنى المكعّب للتشوّه

    وتُستخدَم هذه المَعلمات من خلال فلتر تشويه غير خطي يُطبَّق على موجة الجهد الكهربائية المُدخلة التي تُخفِّض من شدة إشارات الترددات المنخفضة وتفتِّح إشارات الترددات العالية.

    • القيمة التلقائية لمعامل كسب الإدخال هي 0.3.
    • القيمة التلقائية لمستوى استيفاء الشروط في المكعب هي 0.1.

    ننصحك بتعديل القيمتَين معًا. يمكنك العثور عليها في الرمز المبرمَج هنا.

    لمزيد من المعلومات عن الدالة التي يطبّقها هذا الفلتر، يُرجى الرجوع إلى مستند تنفيذ الإجراء المتاح هنا. لمعرفة المزيد من المعلومات عن كيفية تأثير هاتين المَعلمتَين في الإخراج، ننصحك بتخطيط استجابات الترددات للفلاتر وملاحظة كيفية تغيُّر استجابات الترددات مع قيم المَعلمات المختلفة.

  6. مُضاعِف الإخراج للتشويش

    تتحكّم هذه المَعلمة في سعة الاهتزاز النهائية. وهو عبارة عن مكاسب نهائية تُطبَّق بعد محدد نطاق خفيف يحدّ من سعة الاهتزاز إلى أقل من 1. القيمة التلقائية هي 1.5، ويمكن تعديلها في الرمز المبرمَج هنا. إذا كان الاهتزاز خفيفًا جدًا، عليك زيادة القيمة. إذا كنت تسمع هديرًا في معدّات المحرّك، عليك خفض القيمة.