Dodawanie reakcji haptycznych do wydarzeń

Wdrażanie reakcji haptycznych w aplikacjach na Androida za pomocą komponentów View, predefiniowanych interfejsów API VibrationEffect i kompozycji zakotwiczonych na osi czasu z użyciem VibrationEffect.Builder. keywords_public: > Tworzenie aplikacji na Androida, haptyka, reakcje haptyczne, interfejs użytkownika, widoki, VibrationEffect, View.performHapticFeedback, Vibrator, stałe haptyczne

Jednym z najbardziej podstawowych zastosowań haptyki jest przekazywanie informacji zwrotnych o interakcjach użytkownika. Wybieranie czasu, naciśnięcie klawisza na klawiaturze wirtualnej i zaznaczanie tekstu to typowe przykłady dobrych przypadków użycia reakcji haptycznych. Więcej informacji o tym, kiedy i jak stosować haptykę, znajdziesz w zasadach projektowania haptyki.

Na tej stronie opisujemy 3 sposoby zapewniania reakcji haptycznych.

Te metody wykorzystują elementy pierwotne zdefiniowane na poziomie urządzenia, aby zapewnić wysokiej jakości informacje zwrotne dostosowane do używanego urządzenia.

Wszystkie metody reakcji haptycznej domyślnie uwzględniają ustawienia reakcji na dotyk użytkownika.

Używaj komponentów View do generowania reakcji haptycznych

Użyj metody View.performHapticFeedback, aby wygenerować reakcję haptyczną. Stałe haptyczne zdefiniowane przez HapticFeedbackConstants są związane z ich funkcjonalnością w aplikacji, a nie z rodzajem efektu haptycznego.

Podstawowa implementacja może się różnić w zależności od urządzenia i możliwości sprzętowych, ale aplikacja musi tylko uwzględniać rodzaj opinii, które ma przekazywać w danym kontekście. Skupiając się na funkcjonalności, możesz włączyć reakcje haptyczne w przypadku podobnych interakcji. Użytkownicy z czasem uczą się przypisywać różne znaczenia do różnych wrażeń dotykowych.

Wymagania wstępne: włącz reakcję haptyczną

Dopóki View jest widoczny, reakcja haptyczna może być używana w przypadku jego zdarzeń. Niektóre zdarzenia, takie jak dotknięcie i przytrzymanie, mają domyślne wibracje, które są wywoływane, jeśli odbiornik w widoku obsługuje zdarzenie (zwraca wartość true).

Na urządzeniu z Androidem View można wyłączyć reakcję haptyczną, ustawiając wartość właściwości View.hapticFeedbackEnabled na false. Wyłączenie tej właściwości spowoduje wyświetlanie domyślnych opinii.

Metoda performHapticFeedback uwzględnia też ustawienie systemowe HAPTIC_FEEDBACK_ENABLED, które umożliwia użytkownikowi wyłączenie powiadomień w całym systemie.

W przeciwieństwie do innych interfejsów API haptycznych używanie HapticFeedbackConstants z View nie wymaga uprawnienia VIBRATE.

Wybierz HapticFeedbackConstant

Gdy używasz komponentów View z HapticFeedbackConstants, nie musisz sprawdzać obsługi konkretnych urządzeń, ponieważ te stałe w razie potrzeby będą miały zachowanie rezerwowe. Jedynym kryterium jest poziom pakietu SDK żądanej stałej.

Przykład 1. Naciśnięcie klawisza

To przykład dodawania reakcji haptycznej do dotykowego wprowadzania danych w Viewza pomocą detektorów dotyku. Efekty symulują wciśnięcie i zwolnienie przycisku.

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

Przykład 2. Przycisk przesyłania

Przypadki użycia reakcji haptycznej wykraczają poza symulowanie fizycznej interakcji z urządzeniem. Mogą też służyć do przekazywania abstrakcyjnych znaczeń. Na przykład ogólne oczekiwania dotyczące efektu CONFIRM to krótkie i lekkie wibracje, a REJECT może być silniejszym sygnałem informującym o niepowodzeniu. Ilustruje to poniższy przykład opinii dotyczącej przycisku przesyłania.

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

Użyj wstępnie zdefiniowanego VibrationEffect, aby wygenerować reakcję haptyczną

Podejście View-based koncentruje się na interakcji użytkownika, dlatego jest preferowane ze względu na spójność w całym systemie. Możesz jednak wywoływać określone, wstępnie zdefiniowane interfejsy API VibrationEffect, aby uzyskać dostosowane efekty reakcji haptycznej.

Wstępnie zdefiniowane efekty są dostępne jako VibrationEffectstałe i można sprawdzić, czy są obsługiwane, oraz odtwarzać je za pomocą usługi Vibrator, jak pokazano w tych przykładach.

Informacje o obsłudze interfejsów VibrationEffect API na urządzeniach

W podstawowym zastosowaniu nie powinno być potrzeby sprawdzania obsługi poszczególnych interfejsów APIVibrationEffect. Interfejsy API, takie jak Vibrator.areEffectsSupported i Vibrator.areAllEffectsSupported, służą do określania, czy urządzenie ma dostosowaną implementację stałej. Jeśli dostosowany efekt nie jest dostępny, aplikacja może nadal odtwarzać efekty i korzystać z zastępczej implementacji zdefiniowanej przez platformę.

Więcej informacji znajdziesz w sekcji PredefiniowaneVibrationEffect.

Wymagania wstępne: załaduj wibrator i uprawnienie VIBRATE

Większość wibracji można odtwarzać za pomocą usługi Vibrator, którą można wczytać w ten sposób:

Kotlin

import android.os.Vibrator

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

Java

import android.os.Vibrator;

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

Aby korzystać z tej usługi, aplikacja musi mieć uprawnienia VIBRATE do wibracji urządzenia. Możesz dodać to uprawnienie do pliku manifestu aplikacji:

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

Odtwórz wstępnie zdefiniowany VibrationEffect

Wstępnie zdefiniowane efekty można przygotować za pomocą VibrationEffect.createPredefined, a następnie odtworzyć za pomocą jednej z metod vibrate na Vibrator.

W tym przykładzie odtwarzany jest efekt kliknięcia.

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

Tworzenie kompozycji za pomocą VibrationEffect.Builder

Od Androida 16 (4 kwartał 2026 r.) interfejs VibrationEffect.Builder API zapewnia najbardziej elastyczny i wyrazisty sposób tworzenia niestandardowych reakcji haptycznych poprzez sekwencjonowanie dyskretnych ustawień wstępnych, obwiedni i innych elementów wibracji w czasie. Kompozycje utworzone za pomocą VibrationEffect.Builder mają wbudowaną automatyczną obsługę rezerwową w przypadku obsługiwanych elementów.

Tworzenie efektów haptycznych za pomocą VibrationEffect.Builder (i interfejsu VibrationEffect.Composition API) zostało szczegółowo omówione w artykule Tworzenie niestandardowych efektów haptycznych.