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

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

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

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

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

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

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

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

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

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

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

روش performHapticFeedback همچنین به تنظیمات سیستم HAPTIC_FEEDBACK_ENABLED احترام می‌گذارد که به کاربر اجازه می‌دهد به طور بالقوه آنها را برای کل سیستم غیرفعال کند.

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

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

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

مثال 1: فشار دادن کلید

این نمونه ای از نحوه افزودن بازخورد لمسی به ورودی لمسی در 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;
  }
}

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

موارد استفاده از بازخورد لمسی فراتر از شبیه سازی یک تعامل فیزیکی با دستگاه است. آنها همچنین ممکن است برای انتقال یک معنای انتزاعی استفاده شوند. به عنوان مثال، انتظار کلی برای یک افکت 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 بر تعامل کاربر متمرکز است. برای ثبات در سراسر سیستم ترجیح داده می شود. با این حال، API های از پیش تعریف شده VibrationEffect نیز می توانند برای اثرات بازخورد لمسی سفارشی شده مورد استفاده قرار گیرند.

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

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

در استفاده اولیه، نیازی به بررسی پشتیبانی از API های 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.Composition API امکانات بیشتری برای بازخورد لمسی ارائه می دهد. با این حال، بر خلاف افکت‌ها، این نسخه‌های اولیه دارای بازگردانی در سطح سیستم نیستند، به این معنی که باید توجه دقیقی به ویژگی‌های اولیه و سایر قابلیت‌های پشتیبانی شده توسط دستگاه شود.

استفاده از این APIها با جزئیات بیشتری در ایجاد جلوه های لمسی سفارشی مورد بحث قرار گرفته است.