جهاز تجهيز محركات الاهتزاز

قبل تصميم تأثيرات اللمس على جهاز Android، يُفضل الحصول على للحصول على نظرة عامة حول كيفية عمل مشغلات الاهتزاز.

صورة توضيحية لمكوّنات LRA باللمس

تُعد مشغّلات الاهتزاز الأكثر شيوعًا هي المشغّلات الرنانة الخطية (LRA). على كل يتكون LRA من ملف صوتي يتم ضغطه على كتلة متحركة مغناطيسية متصلة بالنوابض. ينتج عن جهد التيار المتردد المطبَّق على الملف الصوتي القوة الكهرومغناطيسية التي تسبب تحرّك الكتلة. يوفر الربيع استعادة القوة التي تسبب عودة الكتلة إلى موضعها الأولي. تشير رسالة الأشكال البيانية تتسبب الحركة ذهابًا وإيابًا في الكتلة في اهتزاز 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 ثوابت تتيح لك إجراء ما يلي:

  • نفِّذ تأثيرات وأساسيات واضحة.

  • اربطها لإنشاء تأثيرات لمسية جديدة.

يمكن لهذه الثوابت واللمسات الأولية المحددة مسبقًا تسريع عملك بشكل كبير. مع ضمان مؤثرات لمسية عالية الجودة.