تستند جميع تحسينات إطار عمل 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
إمكانيات
Vibrator HAL Interface.
حالة الاستخدام 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، ويمكن تعديلها في الرمز المبرمَج هنا. إذا كان الاهتزاز خفيفًا جدًا، عليك زيادة القيمة. إذا كنت تسمع هديرًا في معدّات المحرّك، عليك خفض القيمة.