افزودن بازخورد لمسی به رویدادها

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

این صفحه سه روش ارائه بازخورد لمسی را شرح می‌دهد.

این روش‌ها از عناصر اولیه‌ای که در سطح دستگاه تعریف شده‌اند استفاده می‌کنند تا بازخوردهای با کیفیت بالا و متناسب با دستگاه در دست ارائه دهند.

همه روش‌های بازخورد لمسی به‌طور پیش‌فرض تنظیمات بازخورد لمسی کاربر را رعایت می‌کنند.

از عناصر View برای تولید بازخورد لمسی استفاده کنید

از روش View.performHapticFeedback برای تولید بازخورد لمسی استفاده کنید. ثابت‌های لمسی تعریف‌شده توسط HapticFeedbackConstants بر عملکرد آن‌ها در یک برنامه تمرکز دارند، نه بر نوع جلوه لمسی اجراشده.

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

پیش‌نیازها: فعال کردن بازخورد لمسی

تا زمانی که View قابل‌مشاهده باشد، می‌توان از بازخورد لمسی برای رویدادهای آن استفاده کرد. برخی‌از رویدادها، مانند لمس و نگه داشتن، دارای لمس‌لرزش‌های پیش‌فرضی هستند که اگر شنونده‌ای در نما رویداد را مدیریت کند (true را برمی‌گرداند) فعال می‌شوند.

دستگاه Android View می‌تواند بازخورد لمسی را با تنظیم کردن View.hapticFeedbackEnabled دارایی روی false غیرفعال کند. غیرفعال کردن این دارایی منجر به بازخورد پیش‌فرض می‌شود.

روش performHapticFeedback تنظیم سیستم HAPTIC_FEEDBACK_ENABLED را نیز رعایت می‌کند، که به کاربر امکان می‌دهد آن‌ها را برای کل سیستم غیرفعال کند.

برخلاف دیگر APIهای لمسی، استفاده از HapticFeedbackConstants با View به اجازه VIBRATE نیاز ندارد.

‫HapticFeedbackConstant را انتخاب کنید

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

مثال ۱: فشار کلید

این نمونه‌ای از نحوه افزودن بازخورد لمسی به ورودی لمسی در View بااستفاده از شنوندگان لمسی است. جلوه‌ها حس فشار دادن دکمه و سپس رها کردن آن را شبیه‌سازی می‌کنند.

کاتلین

class HapticTouchListener : View.OnTouchListener {
  override fun onTouch(View view, MotionEvent event) : Boolean {
    when (event.actionMasked) {
      MotionEvent.ACTION_DOWN ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY)
      MotionEvent.ACTION_UP ->
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE)
    }
    return true
  }
}

جاوا

class HapticTouchListener implements View.OnTouchListener {
  @Override
  public boolean onTouch(View view, MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
        break;
      case MotionEvent.ACTION_UP:
        view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE);
        break;
    }
    return true;
  }
}

مثال ۲: دکمه ارسال

کاربردهای بازخورد لمسی فراتر از شبیه‌سازی تعامل فیزیکی با دستگاه است. همچنین ممکن است برای انتقال معنای انتزاعی استفاده شوند. برای مثال، انتظار عمومی برای جلوه CONFIRM لرزشی کوتاه و خفیف است، درحالی‌که REJECT می‌تواند بازخوردی قوی‌تر برای نشان دادن خرابی باشد. این موضوع در مثال زیر برای بازخورد دکمه ارسال نشان داده شده است.

کاتلین

submitButton.setOnClickListener { view ->
  val successful = performSubmit()
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM)
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT)
  }
}

جاوا

submitButton.setOnClickListener(view -> {
  boolean successful = performSubmit();
  if (successful) {
    view.performHapticFeedback(HapticFeedbackConstants.CONFIRM);
  } else {
    view.performHapticFeedback(HapticFeedbackConstants.REJECT);
  }
});

برای تولید بازخورد لمسی، از VibrationEffect ازپیش‌تعریف‌شده استفاده کنید

استفاده از رویکرد View-محور بر تعامل کاربر تمرکز دارد، بنابراین برای ایجاد هماهنگی در سراسر سیستم، این رویکرد را ترجیح دهید. بااین‌حال، می‌توانید میاناهای برنامه‌سازی کاربردی VibrationEffect پیش‌تعریف‌شده خاصی را برای جلوه‌های بازخورد لمسی سفارشی فراخوانی کنید.

جلوه‌های ازپیش‌تعریف‌شده به‌عنوان VibrationEffectثابت‌ها دردسترس هستند و می‌توانند برای پشتیبانی بررسی شوند و با سرویس Vibrator پخش شوند، همان‌طور که در مثال‌های زیر نشان داده شده است.

درک پشتیبانی دستگاه از میاناهای برنامه‌سازی کاربردی VibrationEffect

در استفاده پایه، نیازی به بررسی پشتیبانی از هریک از VibrationEffect میاناهای برنامه‌سازی کاربردی نیست. از APIهایی مثل Vibrator.areEffectsSupported و Vibrator.areAllEffectsSupported برای تعیین اینکه آیا دستگاه پیاده‌سازی سفارشی‌سازی‌شده از ثابت دارد یا نه استفاده می‌شود. اگر جلوه سفارشی‌شده‌ای وجود نداشته باشد، برنامه شما همچنان می‌تواند جلوه‌ها را پخش کند و از پیاده‌سازی جایگزین تعریف‌شده توسط پلاتفرم استفاده کند.

برای جزئیات بیشتر، ازپیش تعریف‌شده VibrationEffect را ببینید.

پیش‌نیازها: بار کردن «لرزاننده» و اجازه VIBRATE

بیشتر لرزش‌ها را می‌توان با سرویس Vibrator پخش کرد که می‌تواند به‌صورت زیر بار شود:

کاتلین

import android.os.Vibrator

val vibrator = context.getSystemService(Vibrator::class.java)

جاوا

import android.os.Vibrator;

Vibrator vibrator = context.getSystemService(Vibrator.class);

برنامه شما باید اجازه VIBRATE برای لرزاندن دستگاه بااستفاده از این سرویس را داشته باشد. می‌توانید این اجازه را به فایل مانیفست برنامه اضافه کنید:

<uses-permission android:name="android.permission.VIBRATE"/>

پخش VibrationEffect ازپیش‌تعریف‌شده

جلوه‌های ازپیش تعریف‌شده را می‌توان بااستفاده از VibrationEffect.createPredefined آماده کرد، سپس بااستفاده از یکی از روش‌های vibrate در Vibrator پخش کرد.

این مثال جلوه «کلیک» را پخش می‌کند.

کاتلین

val vibrator = context.getSystemService(Vibrator::class.java)
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))

جاوا

Vibrator vibrator = context.getSystemService(Vibrator.class);
...
// Requires VIBRATE permission
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));

استفاده از VibrationEffect.Builder برای ایجاد قطعات موسیقی

از Android 16 (26Q4) شروع می‌شود، VibrationEffect.Builder API انعطاف‌پذیرترین و بیانگرترین روش برای ایجاد بازخورد لمسی سفارشی با توالی پیش‌تنظیم‌های مجزا، پوشش‌ها، و دیگر عناصر لرزش درطول زمان است. علاوه‌براین، قطعات ساخته‌شده با VibrationEffect.Builder دارای پشتیبانی خودکار داخلی برای عناصر پشتیبانی‌شده خود هستند.

ترکیب جلوه‌های لمسی با VibrationEffect.Builder (و VibrationEffect.Composition API) در ایجاد جلوه‌های لمسی سفارشی با جزئیات بیشتری مورد بحث قرار گرفته است.