تستند جميع تحسينات إطار عمل Android المستندة إلى تقنية اللمس إلى مجموعة من مبادئ تجربة المستخدم التي تتطوّر بمعدل متساوٍ. تشمل مبادئ التصميم الحالية استبدال الاهتزازات المزعجة بـ اللمسات الواضحة، ومحاولة استكشاف اللمسات الغنية.
الشكل 1: المبادئ الحالية
يسرد الجدول التالي جميع واجهات برمجة التطبيقات المتاحة لللمس.
واجهة برمجة التطبيقات | الطرق | السنة التي تمت فيها الإضافة |
---|---|---|
android.view.HapticFeedbackConstants |
|
قبل عام 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.View |
|
قبل عام 2016 |
android.os.Vibrator |
|
قبل عام 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.os.VibrationEffect |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.VibrationEffect.Composition |
|
2020 (نظام التشغيل Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
الاهتزاز عند التفاعل
منذ ظهور أجهزة إرسال الرسائل القصيرة والهواتف العادية، تم استخدام الاهتزازات المنخفضة الجودة والموفرة للطاقة والتي تعمل باستخدام آلة التنبيه كبديل للرنين الصوتي في الوضع الصامت. إنّ مكونات الأجهزة القديمة التي تُصدر ضوضاء مسموعة عالية وغير سارة يمكن أن تلحق الضرر بتجربة المستخدم باللمس من خلال توفير مرات ظهور منخفضة الجودة (على سبيل المثال، هاتف مكسور زهيد التكلفة).
لمسات واضحة
تساعد تقنية اللمس الواضح في الإحساس بالتغيّرات المنفصلة في الحالة (على سبيل المثال، التغييرات الثنائية أثناء عملية تشغيل/إيقاف الطاقة). بسبب طبيعة ميزة التفاعل المفصّلة، يتم إنشاء لمسات واضحة ككيان واحد (مثل تأثير لمسي واحد لكل حدث إدخال).
يهدف Android إلى توفير لمسات واضحة مع أحاسيس قوية ودقيقة بدلاً من الأحاسيس المزعجة أو غير الواضحة.
تشمل العوامل الثابتة المحدَّدة مسبقًا لللمس التي تم إنشاؤها لدعم اللمس الواضح ما يلي:
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 إلى السعة المستهدَفة. يمكن أن تؤدي الاهتزازات الطويلة إلى توليد إحساسات لمسية ملفتة للانتباه يسهل إدراكها. ومع ذلك، يمكن أن يفاجئ الاهتزاز الطويل المفاجئ المستخدمين في بيئة هادئة، وغالبًا ما ينتج عنه ضوضاء صاخبة. لإنشاء اهتزاز طويل أكثر راحة، طبِّق تأثير تسهيل البداية في بداية الاهتزاز الطويل. يؤدي ذلك إلى إنشاء انتقال سلس للسعة يتطور نحو السعة المستهدَفة.
تطبيق تأثير "التدرّج في السرعة"
تحقَّق من إمكانات الجهاز للتحكّم في الشدة باستخدام
android.os.Vibrator.hasAmplitudeControl()
.- يجب أن تكون النتيجة
true
لإنشاء تأثير تسهيل الدخول مع معدّل اتّساع متغيّر.
- يجب أن تكون النتيجة
استخدِم
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
.عدِّل سلسلة
timings[]
وamplitudes[]
لإنشاء منحنى التخفيف، كما هو موضّح في الشكل 6.
الشكل 6: منحنى تسهيل بدء الاهتزاز الطويل
حالة الاستخدام 3: اللمس المرتبط بالصوت
اللمس المرتبط بالصوت هو أنماط لمس مقترنة بإيقاع الصوت لجذب انتباه المستخدم.
تقنية اللمس المزوّدة بصوت: المزايا
لتنفيذ تقنية اللمس المقترنة بالاقتران الصوتي، ادمج تقنية اللمس الواضحة مع الاهتزازات الطويلة. توفّر اللمسات القوية ولكن القصيرة من تقنية اللمس الواضح أنماطًا متقطعة للإيقاع. عند الجمع بين هذه المحفزات والمستويات العالية من المحفزات التي يوفرها الاهتزاز الطويل، ينجح في جذب انتباه المستخدم.
من المهم مراعاة الأنماط الإيقاعية للشعور. إذا لم يكن هناك إحساس بالإيقاع، فإن المستخدم يدرك الأحاسيس الحسية على أنها اهتزازات عشوائية، ويميل إلى تجاهلها.
الشكل 7. مثال على التجاوب الحسّي الصوتي للزوج
ميزات التجاوب الصوتي المقترنة بالاقتران مع الصوت: نصائح للتنفيذ
يتطلّب تنفيذ ميزة "اللمس المرتبط بالصوت" فهمًا أساسيًا لتشغيل المحتوى في كلّ من قنوات الصوت واللمس. ضع الأمور التالية في اعتبارك.
استخدِم فئة
MediaPlayer
أوSoundPool
.- تشير مواد العرض بتنسيق OGG التي تحتوي على مفتاح بيانات وصفية خاص
(
ANDROID_HAPTIC
متبوعًا بعدد من قنوات اللمس) إلى توفّر بيانات اللمس وإمكانية التشغيل باستخدامMediaPlayer
وSoundPool
.
- تشير مواد العرض بتنسيق OGG التي تحتوي على مفتاح بيانات وصفية خاص
(
حدِّد إمكانية استخدام ميزة "اللمسات التفاعلية" وتشغيل الصوت في
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
). - وتشمل حالات الاستخدام نغمات الرنين وأصوات واجهة المستخدم مع ميزات اللمس والملاحظات المتزامنة.
- بشكل تلقائي، يتم كتم صوت القنوات التي تعمل باللمس (
يجب أن ينفِّذ واجهة برمجة التطبيقات لجهاز الهزّر ميزة التحكّم الخارجي.
- بالنسبة إلى عمليات تنفيذ HIDL، استخدِم السمة
setExternalControl(bool enabled) generates (Status status)
. - بالنسبة إلى عمليات تنفيذ لغة تعريف واجهة نظام Android، استخدِم
void setExternalControl(in boolean enabled)
.
- بالنسبة إلى عمليات تنفيذ HIDL، استخدِم السمة
الشكل 8: تنفيذ تقنية لمس مزوّدة بصوت
التجاوب الحسّي المرتبط بالصوت: أداة إنشاء التأثيرات الصوتية
HapticGenerator
هو تأثير صوتي
تم طرحه في Android 12 ويمكنه إنشاء بيانات لمسية من قناة صوتية
وتشغيلها في الوقت الفعلي كلمسة مرتبطة بالصوت.
يتم تطبيق التأثير على AudioTrack
كما هو موضح في الشكل 9.
الشكل 9: بنية أداة إنشاء اللمس
للتأكّد من أنّ خوارزمية إنشاء اللمس تُنشئ لمسات عالية الجودة، عليك ضبط خوارزمية الإنشاء على محرّك الهزاز في الجهاز من خلال تعديل المَعلمات التي تحدّد سلسلة الفلاتر التي تُطبّقها على أشكال الموجات الصوتية. يوضّح هذا القسم هذه المَعلمات بالتفصيل، ويشرح كيفية ضبطها وفقًا لمواصفات الجهاز.
التردد الرنان لفلتر تمرير النطاق
تردد رنان الهزّاز هو التردد الذي يُحقق به المشغِّل باللمس الحد الأقصى لإخراجه. تعمل هذه المَعلمة على ضبط مُعاكس للمرنان بهدف تسطيح دالة نقل الاستجابة جزئيًا، وذلك للحصول على نطاق تردد أوسع. يربط إطار عمل Android هذه القيمة تلقائيًا بمخرجات
IVibrator.getResonantFrequency
، وهي طريقة HAL الخاصة بالاهتزاز.القيمة التلقائية لهذه المَعلمة هي 150 هرتز. يمكن تعديل ذلك في الرمز هنا.
تأثير التسويّة في المغلّف البطيء
تحدِّد هذه المَعلمة الأس في التسويف الجزئي (التحكّم التلقائي في الكسب). وقيمته التلقائية -0.8، ما يعني أنّه تمت إزالة% 80 من تغيير النطاق الديناميكي من خلال خطوة التحكّم في الاكتساب هذه. يمكن تعديل ذلك في الرمز هنا.
عامل Q لفلتر التوقف النطاقي
يتم تحديد عامل جودة الهزّاز (عامل Q) من خلال مَعلمتَين:
معامل Q الصفري، وهو عامل الجودة للأصفار في فلتر التوقف النطاقي الذي يلغي الرنين جزئيًا.
Q للقطب، وهو عامل جودة الأقطاب في فلتر التوقف النطاقي
تحدّ نسبة هاتين القيمتَين من قمع الرنين من أجل تعزيز الترددات المنخفضة وتوسيع نطاق استجابة الخوارزمية. على سبيل المثال، تؤدي القيم التلقائية 8 لمعامل Q الصفري و4 لمعامل Q للقطب إلى توليد نسبة 2، ما يحدّ من قمع الرنين بمقدار 2 (6 ديسيبل). يربط إطار عمل Android كلا القيمتَين بمخرج
IVibrator.getQFactor
method في واجهة HAL الخاصة بالاهتزاز.إذا لم تراعي القيم التلقائية ضعف قوة الحركة في جهازك، ننصحك بتعديل كلتا القيمتين في الوقت نفسه، ورفعهما أو تقليلهما. يجب أن تكون نسبة Q الصفري إلى Q للقطب أكبر من 1. ويمكن تعديل هذا الخيار في الرمز هنا.
التردد الحدّي للتشويش
يتم تطبيق تردد الزاوية من خلال فلتر تمرير منخفض يعمل على تقليل الاهتزازات ذات المستوى المنخفض وتحسين المستويات الأعلى باستخدام تشويه ثلاثي الأبعاد. القيمة التلقائية هي 300 هرتز. يمكن تعديل ذلك في الرمز هنا.
زيادة الإدخال والحدّ الأدنى المكعّب للتشوّه
وتُستخدَم هذه المَعلمات من خلال فلتر تشويه غير خطي يُطبَّق على موجة الجهد الكهربائية المُدخلة التي تُخفِّض من شدة إشارات الترددات المنخفضة وتفتِّح إشارات الترددات العالية.
- القيمة التلقائية لمعامل كسب الإدخال هي 0.3.
- القيمة التلقائية لمستوى استيفاء الشروط في المكعب هي 0.1.
ننصحك بتعديل القيمتَين معًا. يمكنك العثور عليها في الرمز المبرمَج هنا.
لمزيد من المعلومات عن الدالة التي يطبّقها هذا الفلتر، يُرجى الرجوع إلى مستند تنفيذ الإجراء المتاح هنا. لمعرفة المزيد من المعلومات عن كيفية تأثير هاتين المَعلمتَين في الإخراج، ننصحك بتخطيط استجابات الترددات للفلاتر وملاحظة كيفية تغيُّر استجابات الترددات مع قيم المَعلمات المختلفة.
مُضاعِف الإخراج للتشويش
تتحكّم هذه المَعلمة في سعة الاهتزاز النهائية. وهو عبارة عن مكاسب نهائية تُطبَّق بعد محدد نطاق خفيف يحدّ من سعة الاهتزاز إلى أقل من 1. القيمة التلقائية هي 1.5، ويمكن تعديلها في الرمز المبرمَج هنا. إذا كان الاهتزاز خفيفًا جدًا، عليك زيادة القيمة. إذا كنت تسمع هديرًا في معدّات المحرّك، عليك خفض القيمة.