Menambahkan respons haptic ke peristiwa

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

Halaman ini menjelaskan tiga cara untuk memberikan respons haptic.

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

Semua metode respons haptic mengikuti setelan masukan sentuhan pengguna secara default.

Menggunakan komponen View untuk menghasilkan respons haptik

Gunakan metode View.performHapticFeedback untuk menghasilkan respons haptic. Konstanta haptic yang ditentukan oleh HapticFeedbackConstants berfokus pada fungsinya dalam aplikasi, bukan jenis efek haptic yang dijalankan.

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 ini, Anda dapat mengaktifkan respons haptic untuk interaksi serupa. Pengguna belajar mengaitkan arti yang berbeda ke sensasi haptik yang berbeda dari waktu ke waktu.

Prasyarat: Aktifkan respons haptic

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 haptic dengan menetapkan properti View.hapticFeedbackEnabled ke 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 mengevaluasi dukungan perangkat tertentu, karena konstanta ini akan memiliki perilaku penggantian jika diperlukan. Satu-satunya pertimbangan adalah level SDK dari konstanta yang diinginkan.

Contoh 1: Tekan tombol

Ini adalah contoh cara menambahkan respons haptic ke input sentuh di View menggunakan pemroses sentuh. Efeknya 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 masukan sentuhan tidak hanya sekadar menyimulasikan interaksi fisik dengan perangkat. Mereka juga dapat digunakan untuk menyampaikan makna abstrak. Misalnya, harapan umum untuk efek CONFIRM adalah getaran singkat dan ringan, sedangkan REJECT mungkin menjadi 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);
  }
});

Gunakan VibrationEffect yang telah ditentukan sebelumnya untuk membuat respons haptik

Menggunakan pendekatan berbasis View berfokus pada interaksi pengguna. Metode ini lebih disarankan untuk menjaga konsistensi di seluruh sistem. Namun, API VibrationEffect tertentu yang telah ditetapkan sebelumnya juga dapat dipanggil untuk efek respons haptic yang disesuaikan.

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

Memahami dukungan perangkat VibrationEffect API

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

Untuk mengetahui detail selengkapnya, lihat VibrationEffect.

Prasyarat: Muat izin VIBRATE dan Vibrator

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 menggetarkan perangkat menggunakan layanan ini. Izin tersebut 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 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 respons haptic. Namun, tidak seperti efek, primitif ini tidak memiliki pengganti tingkat sistem, yang berarti perhatian cermat perlu diberikan pada primitif dan kemampuan lain yang didukung oleh perangkat.

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