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

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

وعلى النقيض المباشر والمطورين تسعى جاهدة لبناء التطبيقات التي تعمل على جميع هواتف أندرويد في النظام البيئي، بغض النظر عن المواصفات التقنية لكل جهاز. يمكن أن يتسبب هذا الاختلاف في النهج في حدوث مشكلة تجزئة ، على سبيل المثال ، لا تتوافق إمكانيات الأجهزة لبعض الهواتف مع التوقعات التي وضعها مطورو التطبيقات. لذلك إذا كانت واجهات برمجة التطبيقات اللمسية تعمل على بعض هواتف 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_START ، GESTURE_END

HapticFeedbackConstants الطبقة
الثوابت لمسي في HapticFeedbackConstants مساعدة الأحداث المدخلات مع عناصر واجهة المستخدم معينة، مثل KEYBOARD_PRESS و KEYBOARD_RELEASE ، والتي تسمى من قبل performHapticFeedback() .

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

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

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

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

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

نموذج منفصل

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

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

رسم تخطيطي للمدى الثابت HAL واتساع التغذية المرتدة

الشكل 5. HAL مجموعة ثابتة من السعة

عندما يتم تحديد عدد ثوابت HAL ذات السعة المنفصلة ، فقد حان الوقت لتعيين ثوابت HAL و API بعدد ثوابت HAL. يمكن لعملية رسم الخرائط هذه تقسيم ثابت API الدافع إلى ما يصل إلى ثلاث مجموعات منفصلة من مستويات السعة. تعتمد الطريقة التي يتم بها تجزئة ثوابت API على مبادئ UX لمرافقة أحداث الإدخال. لمزيد من المعلومات، راجع اللمس 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 س S ). في هذه الحالة، يتم تعيين HAL تدرج إلى تعريف الثوابت API ( HAL_H0 س 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

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

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

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