هاپتیک ها را پیاده سازی کنید

سازندگان دستگاه به طور کلی مالک دارایی های خصوصی ایجاد شده برای هر دستگاه در نظر گرفته می شوند. به این ترتیب، تلاش های مهندسی آنها اغلب بر اساس هر دستگاه متمرکز است. تلاش اندکی برای سازگاری دستگاه‌های دیگر در اکوسیستم انجام می‌شود.

در مقابل، توسعه‌دهندگان تلاش می‌کنند تا برنامه‌هایی بسازند که بدون در نظر گرفتن مشخصات فنی هر دستگاه، روی همه تلفن‌های اندرویدی موجود در اکوسیستم کار کنند. این تفاوت در رویکرد می‌تواند باعث ایجاد مشکل تکه تکه شدن شود، به عنوان مثال، قابلیت‌های سخت‌افزاری برخی از تلفن‌ها با انتظارات تعیین‌شده توسط توسعه‌دهندگان برنامه مطابقت ندارد. بنابراین اگر رابط‌های برنامه‌نویسی لمسی روی برخی از تلفن‌های اندرویدی کار کنند اما در برخی دیگر نه، نتیجه یک اکوسیستم ناسازگار است. به همین دلیل است که پیکربندی سخت‌افزار نقش مهمی در حصول اطمینان از اینکه سازندگان می‌توانند APIهای لمسی اندروید را در هر دستگاهی پیاده‌سازی کنند، ایفا می‌کند.

این صفحه یک چک لیست گام به گام برای تنظیم انطباق سخت افزار برای بهترین استفاده از API های لمسی اندروید ارائه می دهد.

شکل زیر ایجاد دانش مشترک بین سازندگان دستگاه و توسعه دهندگان را نشان می دهد که گامی حیاتی در ایجاد یک اکوسیستم منسجم است.

نمودار موارد استفاده لمسی برای توسعه دهندگان برنامه و سازندگان دستگاه

شکل 1. ایجاد دانش بین سازندگان دستگاه و توسعه دهندگان

چک لیست پیاده سازی هاپتیک

  1. ثابت ها را پیاده سازی کنید

    • لیست ثابت ها برای پیاده سازی هاپتیک
  2. ثابت های بین HAL و API را نگاشت

    • توصیه‌های نگاشت بین ثابت‌های 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 REJECT TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , GESTURE_START , GESTURE_END کلاس HapticFeedbackConstants
ثابت‌های هپتیک در HapticFeedbackConstants به رویدادهای ورودی با عناصر رابط کاربری خاص، مانند KEYBOARD_PRESS و KEYBOARD_RELEASE کمک می‌کنند، که توسط performHapticFeedback() فراخوانی می‌شوند.

مرحله 2: ثابت ها را بین HAL و API ترسیم کنید

مرحله 2 نگاشت های توصیه شده بین ثابت های HAL عمومی و ثابت های API را ارائه می دهد. اگر سخت افزار ارزیابی شده در مرحله 1 ثابت های HAL را پیاده سازی نمی کند، باید از مرحله 2 برای به روز رسانی الگوهای بازگشتی توضیح داده شده در مرحله 1 استفاده شود تا خروجی های مشابه تولید شود. نقشه برداری توسط دو مدل پیش فرض مختلف کمک می شود.

  • مدل گسسته (ساده)

    • دامنه متغیر کلیدی این مدل است. هر موجود در HAL دامنه لمسی متفاوتی را نشان می دهد.
    • این مدل حداقل نیاز مورد نیاز برای پیاده سازی UX اولیه لمسی است.
    • یک UX لمسی پیشرفته تر به سخت افزار پیشرفته و یک مدل پیشرفته (مدل پیوسته) نیاز دارد.
  • مدل پیوسته (پیشرفته)

    • بافت و دامنه متغیرهای کلیدی این مدل هستند. هر موجود در HAL نشان دهنده بافت های لمسی متفاوتی است. دامنه هر موجودیت HAL توسط ضریب مقیاس ( S ) کنترل می شود.
    • این مدل به سخت افزار پیشرفته نیاز دارد. اگر OEM ها بخواهند از UX لمسی پیشرفته با VibrationEffect.Composition (برای بهترین استفاده از آخرین API های لمسی) استفاده کنند، پیاده سازی سخت افزار آنها با استفاده از این مدل توصیه می شود.

مدل گسسته

نگاشت تمام ثابت های عمومی ارائه شده در 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() استفاده کنید. برای اجرای VibrationEffect.createWaveform با دامنه متفاوت همانطور که در نظر گرفته شده است، نتیجه باید true باشد.

نمودار جریان ارزیابی اثر لمسی ذهنی

شکل 12. ارزیابی موضوع اثر لمسی 1، 2، و 3

یک ارزیابی ذهنی انجام دهید

برای بررسی انسجام سریع، ابتدا یک ارزیابی ذهنی انجام دهید. هدف از ارزیابی ذهنی مشاهده دامنه اثرات لمسی برای تعیین اینکه آیا دستگاه می تواند لمسی با دامنه های قابل درک انسان ایجاد کند یا خیر است.

یک سؤال خاص که حول این مفهوم ساختار یافته است به این صورت است: آیا دستگاه می‌تواند اثرات لمسی به راحتی قابل درک را برای کاربران ایجاد کند؟ پاسخ به این سوال به شما کمک می‌کند از لمسی ناموفق جلوگیری کنید، از جمله لمسی نامحسوسی که کاربران نمی‌توانند آن را احساس کنند، یا لمسی ناخواسته که در آن شکل‌موج‌ها الگوهای مورد نظر را تولید نمی‌کنند.