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

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

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

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

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

بناء المعرفة

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

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

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

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

  3. قم بتقييم الأجهزة

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

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

ملاحظة: يمكنك معرفة المزيد حول بناء معرفة مشتركة بين مصنعي الأجهزة والمطورين في Advanced Haptics: The when ، What ، and How of Haptic APIs .

الخطوة 1: تطبيق الثوابت

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

الثوابت اللمسية

الشكل 2. تنفيذ الثوابت

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

الثوابت اللمسية المواقع والملخصات
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 في HapticFeedbackConstants تساعد أحداث الإدخال مع بعض عناصر واجهة المستخدم ، مثل KEYBOARD_PRESS و KEYBOARD_RELEASE ، والتي يتم استدعاؤها بواسطة performHapticFeedback() .
EFFECT_TICK ، EFFECT_CLICK ، EFFECT_HEAVY_CLICK ، EFFECT_DOUBLE_CLICK فئة VibrationEffect
لا تتضمن الثوابت اللمسية في VibrationEffect أي فكرة عن أحداث الإدخال ، ولا تحتوي على عناصر واجهة المستخدم. تتضمن الثوابت فكرة مستويات الطاقة بدلاً من ذلك ، مثل EFFECT_CLICK و EFFECT_HEAVY_CLICK ، والتي يتم استدعاؤها بواسطة createPredefined() .
PRIMITIVE_TICK ، PRIMITIVE_CLICK ، VibrationEffect.Composition فئة
الثوابت اللمسية في VibrationEffect.Composition يُسمح addPrimitive(int primitiveId, float scale, int delay) أن يكون له شدة قابلة للتطوير ، والتي يطلق عليها addPrimitive(int primitiveId, float scale, int delay) .

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

تقدم هذه الخطوة التعيينات الموصى بها بين ثوابت HAL العامة وثوابت API. يتم المساعدة في رسم الخرائط من خلال نموذجين افتراضيين مختلفين.

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

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

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

نموذج منفصل

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

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

تأثيرات ضعيفة قوية

الشكل 3. HAL مدى ثابت من السعة

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

رسم الخرائط

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

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

نموذج مستمر

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

المدى الثابت

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

رسم الخرائط المستمر

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

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

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

زيادة التنوع 1

زيادة التنوع 2

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

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

لجميع ثوابت API القابلة للتطوير مثل PRIMITIVE_TICK و PRIMITIVE_CLICK في VibrationEffect.Composition ، يعتمد مستوى طاقة ثابت API على addPrimitive(int primitiveID, float scale, int delay) 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 مللي ثانية لأنه يُنظر إليها على أنها اهتزاز صاخب .

تأثير لمسي مخصص قصير

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

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

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

تباين أمبير

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

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

تأثير مخصص طويل

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

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

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

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

إجراء تقييم متقدم

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