إنّ محرّكات الاهتزاز الأكثر شيوعًا على أجهزة Android هي المحرّكات التوافقية (LRA). تحاكي تقنية LRAs شعور استخدام زر ويُفترض أنّها سطح زجاجي لا يستجيب. تستمر إشارة ردّ الفعل على النقر الواضحة والواضحة عادةً بين 10 و20 مللي ثانية. ويمنح هذا الشعور تفاعلات المستخدمين طابعًا أكثر طبيعية. بالنسبة إلى اللوحات المفاتيح الافتراضية، يمكن أن تزيد ملاحظات النقرات هذه من سرعة الكتابة وتقلل من الأخطاء.
تتضمّن خطوط النقل ذات الجهد المنخفض بعض الترددات الرنانة الشائعة:
- كانت بعض وحدات LRA ذات ترددات رنين تتراوح بين 200 و300 هرتز، وهو تردد يتزامن مع التردد الذي يكون فيه الجلد البشري الأكثر حساسية للاهتزازات. وعادةً ما يُوصف شعور الاهتزازات في نطاق التردد هذا بأنّه شعور سلس وحاد وثاقبة.
- تتميز الطُرز الأخرى من مكبّرات الصوت ذات الطاقة المنخفضة بمعدّلات رنين أقل، تبلغ 150 هرتز تقريبًا. ويُحسّ المستخدمون بأنّ الصوت أكثر ليونة وامتلاءً (من حيث الحجم).
في حال استخدام الجهد الكهربي نفسه عند ترددَين مختلفَين، يمكن أن تختلف amplitudes الناتجة عن الاهتزاز. وكلما ابتعد التردد عن التردّد المتوافق لملف اللفّ LRA، انخفضت شدة الاهتزاز.
تستخدم التأثيرات اللمسية لجهاز معيّن كلّ من محرّك الاهتزاز وسائقه. يمكن أن تقلل وحدات التحكّم باللمس التي تتضمّن ميزتَي "التسريع الفائق" و"التفرامل النشطة" من وقت الارتفاع والرنّان في محركات LRA، ما يؤدي إلى اهتزاز أكثر سرعة ووضوحًا.
تمكين ميزة "تنعيم شكل الموجة" التلقائية على الأجهزة
على سبيل المثال، نوضِّح كيفية تصرف نمط موجي مخصّص على جهاز عام:
Kotlin
val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
تعرض الرسوم البيانية التالية شكل موجة الإدخال وتسريع الإخراج المرتبطَين بمقتطفات الرموز البرمجية السابقة. يُرجى العِلم أنّ التسارع يزداد تدريجيًا وليس بشكل مفاجئ، وذلك عند حدوث تغيير تدريجي في شدة التردد في النمط، أي عند 0 مللي ثانية و150 مللي ثانية و200 مللي ثانية و250 مللي ثانية و700 مللي ثانية. هناك أيضًا زيادة مفاجئة في كل خطوة من خطوات تغيير الشدة، وهناك رنين مرئي يستمر لمدة 50 ملي ثانية على الأقل عندما ينخفض حجم الإدخال فجأة إلى 0.
نمط لمسي محسَّن
لتجنُّب تجاوز الحد الأقصى وتقليل وقت الرنين، غيِّر النطاقات amplitude بشكلٍ أكثر تدريجيًا. يعرض ما يلي الرسم البياني لموجة الصوت ورسم التسارع للملف المعدَّل:
Kotlin
val timings: LongArray = longArrayOf(
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] {
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
};
int[] amplitudes = new int[] {
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
};
int repeatIndex = -1; // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
إنشاء تأثيرات لمسية أكثر تعقيدًا
إنّ العناصر الأخرى في استجابة النقر المُرضية أكثر تعقيدًا، وتتطلّب بعض معرفة بوحدة LRA المستخدَمة في الجهاز. للحصول على أفضل النتائج، استخدِم موجات الجهد المُعدّة مسبقًا والثوابت المقدَّمة من النظام الأساسي على الجهاز، ما يتيح لك تنفيذ ما يلي:
- أن تُنشئ تأثيرات واضحة وأشكالًا أساسية
- يمكنك تسلسلها لإنشاء تأثيرات لمسية جديدة.
يمكن أن تسريع هذه العوامل الثابتة والعناصر الأساسية لللمس المحدّدة مسبقًا عملك بشكل كبير أثناء إنشاء تأثيرات لمس عالية الجودة.