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.
- Użyj
View(zalecane). To podejście jest zorientowane na działania, ma najszersze zastosowanie i nie wymaga uprawnieniaVIBRATE. - Użyj wstępnie zdefiniowanego
VibrationEffect. Takie podejście jest bardziej elastyczne, ale wiąże się z pewnymi kompromisami. - Używaj kompozycji zakotwiczonych na osi czasu z właściwością
VibrationEffect.Builder. To najbardziej elastyczne podejście, które umożliwia sekwencjonowanie ustawień wstępnych, obwiedni i innych elementów wibracji na osi czasu z wbudowaną automatyczną obsługą rezerwową.
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.