Menambahkan respons haptic ke peristiwa

Salah satu kasus penggunaan paling dasar untuk haptik adalah memberikan masukan ke interaksi pengguna. Pemilih waktu, penekanan tombol pada keyboard virtual, dan pemilihan teks adalah contoh umum kasus penggunaan yang baik untuk respons haptik. Untuk informasi selengkapnya tentang kapan dan cara menerapkan haptic, baca Prinsip desain haptic.

Halaman ini menjelaskan tiga cara untuk memberikan respons haptik.

Metode ini menggunakan primitif yang ditentukan di tingkat perangkat untuk memberikan masukan berkualitas tinggi yang disesuaikan dengan perangkat yang ada.

Semua metode respons haptik mengikuti setelan respons sentuh pengguna secara default.

Menggunakan komponen View untuk menghasilkan respons haptik

Gunakan metode View.performHapticFeedback untuk menghasilkan respons haptik. Konstanta haptik yang ditentukan oleh HapticFeedbackConstants difokuskan pada fungsinya dalam aplikasi, bukan jenis efek haptik yang dilakukan.

Implementasi yang mendasarinya dapat bervariasi bergantung pada kemampuan perangkat dan hardware, tetapi aplikasi hanya perlu mempertimbangkan jenis masukan yang akan diberikan dalam konteks tertentu. Dengan berfokus pada fungsi, Anda dapat mengaktifkan respons haptik untuk interaksi serupa. Pengguna belajar mengaitkan berbagai makna dengan sensasi haptik yang berbeda dari waktu ke waktu.

Prasyarat: Aktifkan info via sentuhan

Selama View terlihat, respons haptic dapat digunakan untuk peristiwanya. Beberapa peristiwa, seperti tekan lama, memiliki haptik default yang dipicu jika pemroses di tampilan menangani peristiwa (menampilkan true).

View Android dapat menonaktifkan respons haptik dengan menetapkan properti View.hapticFeedbackEnabled ke false. Menonaktifkan properti ini akan menghasilkan masukan default.

Metode performHapticFeedback juga mematuhi setelan sistem HAPTIC_FEEDBACK_ENABLED, yang memungkinkan pengguna berpotensi menonaktifkannya untuk seluruh sistem.

Tidak seperti API haptik lainnya, penggunaan HapticFeedbackConstants dengan View tidak memerlukan izin VIBRATE.

Memilih HapticFeedbackConstant

Saat menggunakan komponen View dengan HapticFeedbackConstants, Anda tidak perlu mengevaluasi dukungan perangkat tertentu, karena konstanta ini akan memiliki perilaku fallback jika diperlukan. Satu-satunya pertimbangan adalah level SDK konstanta yang diinginkan.

Contoh 1: Penekanan tombol

Ini adalah contoh cara menambahkan respons haptik ke input sentuh di View menggunakan pemroses sentuh. Efek ini menyimulasikan perasaan menekan tombol, lalu melepaskannya.

Kotlin

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
  }
}

Java

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;
  }
}

Contoh 2: Tombol kirim

Kasus penggunaan respons haptik tidak hanya menyimulasikan interaksi fisik dengan perangkat. Istilah ini juga dapat digunakan untuk menyampaikan makna abstrak. Misalnya, harapan umum untuk efek CONFIRM adalah getaran singkat dan ringan, sedangkan REJECT mungkin berupa masukan yang lebih kuat untuk menandakan kegagalan. Hal ini diilustrasikan dalam contoh berikut untuk masukan tombol kirim.

Kotlin

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

Java

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

Menggunakan VibrationEffect yang telah ditentukan untuk menghasilkan respons haptik

Menggunakan pendekatan berbasis View akan berfokus pada interaksi pengguna. Hal ini lebih disukai untuk konsistensi di seluruh sistem. Namun, API VibrationEffect tertentu yang telah ditentukan juga dapat dipanggil untuk efek masukan haptic yang disesuaikan.

Efek standar tersedia sebagai konstanta VibrationEffect, dan dapat diperiksa untuk mengetahui dukungan dan diputar dengan layanan Vibrator seperti yang ditunjukkan dalam contoh berikut.

Memahami dukungan perangkat untuk VibrationEffect API

Dalam penggunaan dasar, Anda tidak perlu memeriksa dukungan untuk setiap VibrationEffect API. API seperti Vibrator.areEffectsSupported dan Vibrator.areAllEffectsSupported digunakan untuk menentukan apakah perangkat memiliki implementasi konstanta yang disesuaikan. Jika efek yang disesuaikan tidak ada, aplikasi Anda tetap dapat memutar efek dan menggunakan penerapan fallback yang ditentukan platform.

Untuk detail selengkapnya, lihat VibrationEffect standar.

Prasyarat: Memuat Getaran dan izin VIBRATE

Sebagian besar getaran dapat diputar dengan layanan Vibrator, yang dapat dimuat sebagai berikut:

Kotlin

import android.os.Vibrator

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

Java

import android.os.Vibrator;

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

Aplikasi harus memiliki izin VIBRATE agar dapat membuat perangkat bergetar menggunakan layanan ini. Izin dapat ditambahkan ke file manifes aplikasi:

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

Memutar VibrationEffect yang telah ditentukan

Efek standar dapat disiapkan menggunakan VibrationEffect.createPredefined, lalu diputar menggunakan salah satu metode vibrate di Vibrator.

Contoh ini memutar efek Klik.

Kotlin

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

Java

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

Menggunakan komposisi lanjutan dengan primitif

VibrationEffect.Composition API menawarkan kemungkinan tambahan untuk masukan haptik. Namun, tidak seperti efek, primitif ini tidak memiliki fallback tingkat sistem, yang berarti bahwa perhatian yang cermat perlu diberikan pada primitif dan kemampuan lain yang didukung oleh perangkat.

Penggunaan API ini dibahas secara lebih mendetail di Membuat Efek Haptik Kustom.