تنفيذ اللمسات

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

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

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

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

قائمة مراجعة تنفيذ Haptics

  1. طبِّق الثوابت

    • قائمة الثوابت لتطبيق اللمسات.
  2. ثوابت الخريطة بين HAL و API

  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 ، CONFIRM ، REJECT GESTURE_END GESTURE_START

فئة 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 مختلفة. يوصى بهذا الأسلوب إذا كنت تريد إضافة تنوع إلى النسيج .

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

يتضمن تقييم الأجهزة تحديد ثلاثة تأثيرات لمسية ، بعنوان التأثيرات 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

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

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

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