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

با استفاده از کامپوننت‌های View، APIهای از پیش تعریف‌شده‌ی VibrationEffect و کامپوزیشن‌های متصل به تایم‌لاین با VibrationEffect.Builder، بازخورد لمسی را در برنامه‌های اندروید پیاده‌سازی کنید. keywords_public: > توسعه اندروید، haptics، بازخورد لمسی، رابط کاربری، نماها، VibrationEffect، View.performHapticFeedback، Vibrator، ثابت‌های لمسی

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

کاتلین

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

این مثال یک افکت کلیک (Click) پخش می‌کند.

کاتلین

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 برای ایجاد کامپوزیشن‌ها

از اندروید ۱۶ (۲۶Q۴)، رابط برنامه‌نویسی کاربردی VibrationEffect.Builder با توالی‌دهی پیش‌تنظیمات گسسته، انولوپ‌ها و سایر عناصر ارتعاش در امتداد یک جدول زمانی، انعطاف‌پذیرترین و گویاترین روش را برای ایجاد بازخورد لمسی سفارشی ارائه می‌دهد. علاوه بر این، کامپوزیشن‌های ایجاد شده با VibrationEffect.Builder دارای پشتیبانی خودکار داخلی برای عناصر پشتیبانی شده خود هستند.

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