Menambahkan respons haptic ke peristiwa

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

Halaman ini menjelaskan tiga cara untuk memberikan respons haptik.

Metode ini menggunakan primitif yang ditetapkan pada tingkat perangkat untuk memberikan kualitas tinggi masukan yang disesuaikan dengan perangkat yang digunakan.

Semua metode respons haptik menghormati setelan masukan sentuh pengguna dengan secara default.

Menggunakan komponen View untuk menghasilkan respons haptik

Gunakan metode View.performHapticFeedback untuk menghasilkan respons haptik. Tujuan konstanta haptic yang ditentukan oleh HapticFeedbackConstants difokuskan pada fungsi dalam aplikasi, bukan jenis efek haptik yang dilakukan.

Implementasi yang mendasarinya mungkin bervariasi, bergantung pada perangkat dan hardware kemampuan, tetapi aplikasi hanya perlu mempertimbangkan jenis umpan balik untuk memberikan dalam konteks tertentu. Dengan berfokus pada fungsi, Anda dapat mengaktifkan haptic masukan untuk interaksi yang serupa. Pengguna belajar mengaitkan berbagai arti terhadap sensasi haptik yang berbeda dari waktu ke waktu.

Prasyarat: Aktifkan respons haptik

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

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

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

Tidak seperti API haptic lainnya, menggunakan HapticFeedbackConstants dengan View tidak memerlukan izin VIBRATE.

Pilih HapticFeedbackConstant

Saat menggunakan komponen View dengan HapticFeedbackConstants, Anda tidak perlu untuk mengevaluasi dukungan perangkat tertentu, karena konstanta ini akan memiliki penggantian perilaku model jika diperlukan. Satu-satunya pertimbangan adalah tingkat SDK dari .

Contoh 1: Menekan tombol

Berikut adalah contoh cara menambahkan respons haptik ke input sentuh di View menggunakan pemroses sentuh. Efeknya menyimulasikan perasaan penekanan pada tombol dan kemudian 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 umpan balik haptik lebih dari sekadar menyimulasikan interaksi fisik dengan perangkat seluler. Istilah ini mungkin juga digunakan untuk menyampaikan makna abstrak. Misalnya, ekspektasi umum untuk Efek CONFIRM adalah getaran singkat dan ringan saat REJECT mungkin adalah umpan balik yang lebih kuat untuk menandakan kegagalan. Hal ini diilustrasikan dalam contoh 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 berfokus pada interaksi pengguna. Penting lebih disukai karena konsistensi di seluruh sistem. Namun, fungsi spesifik VibrationEffect API juga dapat dipanggil untuk respons haptik yang disesuaikan yang dihasilkan.

Efek yang telah ditentukan tersedia sebagai VibrationEffect konstanta, dan dapat berupa diperiksa untuk mendapatkan dukungan dan diputar dengan layanan Vibrator seperti yang ditunjukkan di contoh berikut.

Memahami dukungan perangkat untuk VibrationEffect API

Dalam penggunaan dasar, seharusnya tidak perlu memeriksa dukungan VibrationEffect API. API seperti Vibrator.areEffectsSupported dan Vibrator.areAllEffectsSupported digunakan untuk menentukan apakah perangkat memiliki implementasi konstanta yang disesuaikan. Jika efek yang disesuaikan tidak saat ini, aplikasi Anda tetap dapat memutar efek dan menggunakan parameter yang ditentukan implementasi penggantian.

Untuk detail selengkapnya, lihat Standar VibrationEffect.

Prasyarat: Muat Vibrator 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 secara berurutan untuk menggetarkan perangkat menggunakan layanan ini. Izin akses dapat ditambahkan ke file manifes aplikasi:

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

Memutar VibrationEffect yang telah ditentukan

Efek yang telah ditentukan dapat disiapkan menggunakan VibrationEffect.createPredefined, lalu dimainkan menggunakan salah satu metode vibrate di Vibrator.

Contoh ini memainkan 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 respons haptik. Namun, tidak seperti efek, primitif ini tidak memiliki tingkat sistem, yang berarti bahwa Anda harus memperhatikan dengan cermat primitif dan kemampuan lain yang didukung perangkat.

Penggunaan API ini dibahas secara lebih mendetail dalam Membuat Efek Haptic Kustom.