تنفيذ اللمس

تعتبر الشركات المصنعة للأجهزة عمومًا مالكة الأصول الخاصة التي تم إنشاؤها لكل جهاز. على هذا النحو، غالبًا ما تركز جهودهم الهندسية على أساس كل جهاز ؛ لا يبذل أي جهد يذكر لتحقيق اتساق الأجهزة الأخرى في النظام البيئي.

وفي تناقض مباشر، يسعى المطورون إلى إنشاء تطبيقات تعمل على جميع هواتف Android في النظام البيئي، بغض النظر عن المواصفات الفنية لكل جهاز. يمكن أن يتسبب هذا الاختلاف في النهج في حدوث مشكلة تجزئة، على سبيل المثال، لا تتوافق إمكانات الأجهزة لبعض الهواتف مع التوقعات التي حددها مطورو التطبيق. لذا، إذا كانت واجهات برمجة التطبيقات اللمسية تعمل على بعض هواتف Android دون غيرها، فستكون النتيجة نظامًا بيئيًا غير متناسق. ولهذا السبب يلعب تكوين الأجهزة دورًا حاسمًا في ضمان قدرة الشركات المصنعة على تنفيذ واجهات برمجة تطبيقات Android اللمسية على كل جهاز.

توفر هذه الصفحة قائمة مرجعية خطوة بخطوة لإعداد توافق الأجهزة لتحقيق أفضل استخدام لواجهات برمجة تطبيقات Android اللمسية.

يوضح الشكل أدناه بناء المعرفة المشتركة بين الشركات المصنعة للأجهزة والمطورين، وهي خطوة حاسمة في إنشاء نظام بيئي متماسك.

رسم تخطيطي لحالات استخدام اللمس لمطوري التطبيقات والشركات المصنعة للأجهزة

الشكل 1. بناء المعرفة بين الشركات المصنعة للأجهزة والمطورين

قائمة التحقق من تنفيذ Haptics

  1. تنفيذ الثوابت

    • قائمة الثوابت لتنفيذ اللمسات.
  2. تعيين الثوابت بين HAL وAPI

    • توصيات التعيين بين ثوابت واجهة برمجة التطبيقات العامة ( العناصر النائبة المسماة في إطار العمل) وثوابت HAL، التي تنفذ العناصر النائبة.
    • راجع مبادئ التصميم لتوجيه التعيين الموصى به لمعرفة المزيد حول هذه العملية.
  3. تقييم الأجهزة

    • تعليمات حول التأثيرات اللمسية المستهدفة. استخدم هذه الإرشادات لإجراء فحوصات سريعة على أجهزتك.

سنستكشف كل خطوة من هذه الخطوات بمزيد من التفصيل أدناه.

الخطوة 1: تنفيذ الثوابت

قم بإجراء هذه الفحوصات لتحديد ما إذا كان جهازك يلبي الحد الأدنى من المتطلبات لتنفيذ اللمس.

مخطط انسيابي لعملية تنفيذ اللمس

الشكل 2. تنفيذ التأثيرات

مخطط انسيابي لخطوات تنفيذ البدائيات

الشكل 3. تنفيذ البدائيين

تحقق من حالة تنفيذ الثوابت اللمسية التالية.

الثوابت اللمسية المواقع والملخصات
EFFECT_TICK ، EFFECT_CLICK ، EFFECT_HEAVY_CLICK ، EFFECT_DOUBLE_CLICK فئة VibrationEffect
لا تتضمن الثوابت اللمسية في VibrationEffect أي فكرة عن أحداث الإدخال، ولا تحتوي على عناصر واجهة مستخدم. تتضمن الثوابت مفهوم مستويات الطاقة بدلًا من ذلك، مثل EFFECT_CLICK و EFFECT_HEAVY_CLICK ، والتي يتم استدعاؤها بواسطة createPredefined() .
PRIMITIVE_TICK ، PRIMITIVE_CLICK ، PRIMITIVE_LOW_TICK> ، PRIMITIVE_SLOW_RISE ، PRIMITIVE_QUICK_RISE ، PRIMITIVE_QUICK_FALL ، PRIMITIVE_SPIN ، PRIMITIVE_THUD VibrationEffect.Composition فئة التركيب
يُسمح للثوابت اللمسية في VibrationEffect.Composition بأن تكون ذات كثافة قابلة للتطوير، والتي يتم استدعاؤها بواسطة addPrimitive(int primitiveId, float scale, int delay) .

يتم تنفيذ الاهتزازات البديلة الموضحة أدناه على الأجهزة التي لا تطبق ثوابت VibrationEffect . يوصى بتحديث هذه التكوينات لتحقيق الأداء الأفضل على هذه الأجهزة.

  1. EFFECT_CLICK

    تم إنشاء اهتزاز الشكل الموجي باستخدام VibrationEffect.createWaveform والتوقيتات التي تم تكوينها في frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern .

  2. EFFECT_HEAVY_CLICK

    تم إنشاء اهتزاز الشكل الموجي باستخدام VibrationEffect.createWaveform والتوقيتات التي تم تكوينها في frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    تم إنشاء اهتزاز الموجي باستخدام VibrationEffect.createWaveform والتوقيتات (0، 30، 100، 30).

  4. EFFECT_TICK

    تم إنشاء اهتزاز الشكل الموجي باستخدام VibrationEffect.createWaveform والتوقيتات التي تم تكوينها في frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

مخطط انسيابي لخطوات اختبار ردود الفعل اللمسية

الشكل 4. تنفيذ ثوابت ردود الفعل

تحقق من حالة ثوابت التعليقات العامة التالية.

الثوابت اللمسية المواقع والملخصات
CLOCK_TICK ، CONTEXT_CLICK ، KEYBOARD_PRESS ، KEYBOARD_RELEASE ، KEYBOARD_TAP ، LONG_PRESS ، TEXT_HANDLE_MOVE ، VIRTUAL_KEY ، VIRTUAL_KEY_RELEASE REJECT تأكيد، CONFIRM ، GESTURE_START ، GESTURE_END فئة HapticFeedbackConstants
تساعد الثوابت اللمسية في HapticFeedbackConstants أحداث الإدخال مع بعض عناصر واجهة المستخدم، مثل KEYBOARD_PRESS و KEYBOARD_RELEASE ، والتي يتم استدعاؤها بواسطة performHapticFeedback() .

الخطوة 2: تعيين الثوابت بين HAL وAPI

تقدم الخطوة 2 التعيينات الموصى بها بين ثوابت HAL العامة وثوابت API. إذا كانت الأجهزة التي تم تقييمها في الخطوة 1 لا تنفذ ثوابت HAL، فيجب استخدام الخطوة 2 لتحديث الأنماط الاحتياطية الموضحة في الخطوة 1 من أجل إنشاء مخرجات مماثلة. يتم دعم التعيين بواسطة نموذجين افتراضيين مختلفين.

  • نموذج منفصل (بسيط)

    • السعة هي المتغير الرئيسي لهذا النموذج. يمثل كل كيان في HAL سعة لمسية مختلفة.
    • يعد هذا النموذج هو الحد الأدنى من المتطلبات اللازمة لتنفيذ تجربة المستخدم الأساسية.
    • تتطلب تجربة المستخدم اللمسية الأكثر تقدمًا أجهزة متقدمة ونموذجًا متقدمًا (نموذج مستمر).
  • النموذج المستمر (متقدم)

    • الملمس والسعة هي المتغيرات الرئيسية لهذا النموذج. يمثل كل كيان في HAL أنسجة لمسية مختلفة. يتم التحكم في سعة كل كيان HAL بواسطة عامل القياس ( S ).
    • يتطلب هذا النموذج أجهزة متقدمة. إذا أراد مصنعو المعدات الأصلية استخدام تجربة المستخدم اللمسية المتقدمة مع VibrationEffect.Composition (للحصول على أفضل استخدام لأحدث واجهات برمجة التطبيقات اللمسية)، فمن المستحسن تنفيذ أجهزتهم باستخدام هذا النموذج.

نموذج منفصل

يوصى بتعيين كافة الثوابت العامة المتوفرة في واجهة برمجة التطبيقات (API) مع ثوابت HAL المناسبة. لبدء هذه العملية، اكتشف عدد أشكال الموجات اللمسية ذات السعة المنفصلة التي يمكن للجهاز تحديدها في HAL. يبدو السؤال المحدد الذي يتمحور حول هذه الفكرة كما يلي: ما هو عدد التأثيرات اللمسية ذات النبضة الواحدة مع اختلافات في السعة التي يمكن إدراكها بواسطة الإنسان والتي يمكن تحديدها في هاتفي؟ الإجابة على هذا السؤال تحدد التعيين.

يعد تحديد ثوابت HAL عملية تعتمد على الأجهزة. على سبيل المثال، قد يحتوي هاتف المبتدئين على إمكانات الأجهزة فقط لإنتاج شكل موجة لمسية واحدة. تنتج الأجهزة التي تحتوي على مكونات أجهزة أكثر تقدمًا نطاقًا أوسع من مستويات السعة المنفصلة، ​​ويمكنها تحديد أشكال موجية لمسية متعددة في HAL. يأخذ التعيين الثابت HAL-API ثابت HAL (باستخدام السعة المتوسطة كخط أساسي)، ثم يرتب تأثيرات أقوى أو أضعف من هناك.

رسم تخطيطي لنطاق ثابت HAL واتساع ردود الفعل

الشكل 5. النطاق الثابت HAL حسب السعة

عندما يتم تحديد عدد ثوابت HAL ذات السعة المنفصلة، ​​فقد حان الوقت لتعيين ثوابت HAL وAPI حسب عدد ثوابت HAL. يمكن لعملية التعيين هذه تقسيم ثابت API النبضي إلى ما يصل إلى ثلاث مجموعات منفصلة من مستويات السعة. تعتمد الطريقة التي يتم بها تجزئة ثوابت واجهة برمجة التطبيقات (API) على مبادئ تجربة المستخدم (UX) لأحداث الإدخال المصاحبة. لمزيد من المعلومات، راجع تصميم Haptics UX .

نموذج منفصل لرسم الخرائط الثابتة لـ HAL-API

الشكل 6. رسم الخرائط الثابتة HAL-API: نموذج منفصل

إذا كان جهازك يدعم اثنين فقط من ثوابت HAL ذات سعة منفصلة، ​​ففكر في دمج ثوابت HAL ذات مستوى السعة المتوسطة والعالية. مثال على هذه الفكرة عمليًا هو تعيين EFFECT_CLICK و EFFECT_HEAVY_CLICK لنفس ثابت HAL، والذي سيكون ثابت HAL لمستوى السعة المتوسطة. إذا كان جهازك يدعم ثابت HAL واحدًا فقط بسعة منفصلة، ​​ففكر في دمج المستويات الثلاثة في مستوى واحد.

نموذج مستمر

يمكن تطبيق النموذج المستمر مع قابلية التوسع في السعة لتحديد ثوابت HAL. يمكن تطبيق عامل القياس ( S ) على ثوابت HAL (على سبيل المثال، HAL_H0 , HAL_H1 ) لإنتاج HAL المقيس ( HAL_H0 x S ). في هذه الحالة، يتم تعيين HAL المقيس لتحديد ثوابت API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) كما هو موضح في الشكل 7. باستخدام قابلية التوسع في السعة للنموذج المستمر، يمكن للجهاز تخزين عدد صغير من ثوابت HAL بأنسجة مميزة وإضافة اختلافات السعة عن طريق ضبط عامل القياس ( S ). يمكن لمصنعي الأجهزة تحديد عدد ثوابت HAL بناءً على عدد الأنسجة اللمسية المختلفة التي يريدون توفيرها.

نطاق ثابت HAL حسب الملمس والسعة

الشكل 7. النطاق الثابت لـ HAL حسب الملمس (HAL_H0) ومقياس السعة (S)

النموذج المستمر لرسم الخرائط الثابتة لـ HAL-API

الشكل 8. رسم الخرائط الثابتة لـ HAL-API: نموذج مستمر

في النموذج المستمر، تمثل ثوابت HAL المختلفة أنسجة لمسية مختلفة بدلاً من السعات المختلفة؛ يمكن لعامل القياس ( S ) تكوين السعة. ومع ذلك، نظرًا لأن إدراك المادة (على سبيل المثال، الحدة) يرتبط بإدراك المدة والسعة، يوصى بالجمع بين المادة وعامل القياس (في عملية تصميم تعيين HAL-API).

يوضح الشكل 7 التعيين الثابت عن طريق زيادة التباين من HAL واحد إلى العديد من ثوابت API مع قابلية التوسع في السعة.

زيادة التباين 1

زيادة التباين 2

الشكل 9. زيادة التباين مع قابلية التوسع في السعة

بالنسبة لجميع ثوابت API القابلة للتطوير مثل PRIMITIVE_TICK و PRIMITIVE_CLICK في VibrationEffect.Composition ، يعتمد مستوى الطاقة لثابت API على معلمة float scale عندما يتم الإعلان عن ثابت API من خلال addPrimitive(int primitiveID, float scale, int delay) . يمكن تصميم PRIMITIVE_TICK و PRIMITIVE_CLICK بتمييز واضح باستخدام ثوابت HAL مختلفة. يوصى بهذا الأسلوب إذا كنت تريد إضافة تباين إلى الملمس .

الخطوة 3: تقييم الأجهزة

يتضمن تقييم الأجهزة تحديد ثلاثة تأثيرات لمسية، تسمى التأثيرات 1 و2 و3 لهذا التقييم المحدد.

التأثير 1: ثوابت لمسية قصيرة محددة مسبقًا

ثابت VibrationEffect.EFFECT_CLICK هو التأثير الأساسي أو القاسم المشترك في تعيين HAL-API المقدم في الخطوة 2. وقد تم تعيينه باستخدام التأثير الأكثر استخدامًا، HapticFeedbackConstants.KEYBOARD_PRESS . يساعد تقييم هذا التأثير في تحديد مدى جاهزية جهازك المستهدف للحصول على لمسات واضحة .

التأثير 2: تأثير لمسى قصير مخصص

ثابت VibrationEffect.createOneShot(20,255) مخصص للتأثيرات اللمسية المخصصة. بالنسبة للنبضات المخصصة القصيرة والمفردة، فإن 20 مللي ثانية هي الحد الأقصى الموصى به لتحديد المدة. لا يُنصح بإصدار نبضة واحدة أطول من 20 مللي ثانية لأنه يُنظر إليها على أنها اهتزاز صاخب .

الشكل الموجي للتأثير اللمسي القصير المخصص

الشكل 10. التأثير اللمسي المخصص القصير

التأثير 3: تأثير لمسي مخصص طويل مع اختلاف في السعة

ثابت VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) مخصص للتأثيرات المخصصة الطويلة مع اختلاف السعة. تعد القدرة على إنتاج سعات متفاوتة للتأثيرات اللمسية المخصصة أحد المؤشرات لتقييم قدرات الجهاز على اللمسات الغنية . timings [] amplitudes [] هي {500, 500} و {128, 255} ، على التوالي، مما يمثل اتجاهًا متزايدًا للسعة من 50% إلى 100%، بمعدل أخذ عينات قدره 500 مللي ثانية.

الشكل الموجي للتأثير اللمسي مع اختلاف السعة

الشكل 11. التأثير اللمسي المخصص الطويل مع اختلاف السعة

للتحقق من قدرات الأجهزة للتحكم في السعة للتأثير 3، استخدم طريقة Vibrator.hasAmplitudeControl() . يجب أن تكون النتيجة true لتنفيذ VibrationEffect.createWaveform بسعة متفاوتة على النحو المنشود.

مخطط انسيابي لتقييم التأثير اللمسي الذاتي

الشكل 12. تقييم الموضوع للتأثير اللمسي 1 و2 و3

إجراء تقييم شخصي

لإجراء فحص سريع للتماسك، قم بإجراء تقييم شخصي أولاً. الهدف من التقييم الذاتي هو مراقبة مدى التأثيرات اللمسية لتحديد ما إذا كان الجهاز يمكنه توليد اللمسات ذات النطاقات التي يمكن إدراكها بواسطة الإنسان.

يبدو السؤال المحدد الذي يتمحور حول هذه الفكرة كما يلي: هل يمكن للجهاز إنتاج تأثيرات لمسية يمكن إدراكها بسهولة للمستخدمين كما هو متوقع؟ تساعدك الإجابة على هذا السؤال على تجنب اللمسات الفاشلة ، بما في ذلك اللمسات غير المحسوسة التي لا يمكن للمستخدمين الشعور بها، أو اللمسات غير المقصودة حيث لا تنتج أشكال الموجة أنماطًا على النحو المنشود.