قبل تصميم التأثيرات الملموسة على جهاز Android، ننصحك بالاطّلاع على نظرة عامة حول آلية عمل مشغّلات الاهتزاز.
أكثر مشغلات الاهتزاز شيوعًا هي مشغلات الرنان الخطي (LRA). ويتألف كل هذا الصدد من ملف صوتي مضغوط فوق كتلة مغناطيسية متحركة مرتبطة بنوابض. يولّد جهد التيار المتردد (AC) المطبق على الملف الصوتي قوة كهرومغناطيسية تتسبب في تحرّك الكتلة. يوفر النابض القوة الاستعادة التي تؤدي إلى عودة الكتلة إلى موضع بدايتها. وتؤدي حركة الكتلة ذهابًا وإيابًا إلى اهتزاز "LRA". ولديها تردد اهتزاز يصل فيه الناتج إلى أقصى حد.
بناءً على الجهد الكهربائي نفسه للإدخال على ترددين مختلفين، يمكن أن تختلف سعات إخراج الاهتزاز. كلّما ابتعد التردّد عن الترددات الرنانة لـ LRA، انخفضت سعات الاهتزاز.
تتمثل إحدى الوظائف الشائعة لـ LRA في أحد الأجهزة في محاكاة الشعور بالنقر على زر على سطح زجاجي غير مستجيب. إنها تعمل على جعل تفاعل المستخدم يبدو طبيعيًا أكثر. عند تطبيق الكتابة على لوحة مفاتيح افتراضية، يمكن أن تؤدي تعليقات النقر إلى زيادة سرعة الكتابة وتقليل الأخطاء. عادةً ما تكون مدة إشارة ملاحظات النقر الواضحة والواضحة أقل من 10 إلى 20 مللي ثانية. ويتطلب الحصول على نقرة جيدة معرفة بعض المعلومات عن 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 // Do not 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 // Do not repeat. vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
يُظهر المخطط أدناه الشكل الموجي المقابل لمقتطفات التعليمات البرمجية الموضحة أعلاه.
ويظهر التسارع المقابل أدناه:
تجدر الإشارة إلى أنّ التسارع يزداد تدريجيًا، وليس فجأة، عند حدوث تغيير في الخطوة في النمط (على سبيل المثال، عند 0 ملي ثانية أو 150 ملي ثانية أو 200 ملي ثانية أو 250 ملي ثانية أو 700 ملي ثانية). كما أن هناك تجاوزًا عند كل خطوة تغيير للسعة، وهناك "رنين" مرئي يستمر لمدة 50 ملّي ثانية على الأقل عند انخفاض سعات الإدخال فجأة إلى 0.
يمكن تحسين هذا النمط الملموس عن طريق زيادة السعة وخفضها تدريجيًا لتجنب تجاوز التجاوز وتقليل وقت الرنين. يوضح ما يلي الشكل الموجي ومخططات التسارع للنسخة المعدَّلة.
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));
وبالتالي، يتطلّب إنشاء تأثير ملموس على جهاز Android أكثر من مجرد توفير قيمة تردد وسعة. إن تصميم تأثير ملموس من الصفر من نقطة الصفر ليس مهمة بسيطة بدون الوصول الكامل إلى المواصفات الهندسية لمشغّل الاهتزاز والسائق. توفّر واجهات برمجة تطبيقات Android ثوابت تتيح لك إجراء ما يلي:
استخدِم تأثيرات وعناصر أساسية واضحة.
قم بتسلسلها لإنشاء تأثيرات لمسية جديدة.
يمكن لهذه الثوابت واللمسات الأولية المحددة مسبقًا تسريع عملك بشكل كبير مع ضمان الحصول على تأثيرات لمسية عالية الجودة.