Dodawanie reakcji haptycznych do wydarzeń

Jednym z najprostszych przypadków użycia technologii haptycznych jest przekazywanie informacji zwrotnych do interakcji użytkowników. Selektory czasu, naciśnięcie klawisza na klawiaturze wirtualnej i zaznaczanie tekstu to typowe przykłady dobrych zastosowań reakcji haptycznych. Więcej informacji o tym, kiedy i jak stosować reakcję haptyczną, znajdziesz w zasadach projektowania haptyki.

Na tej stronie opisujemy 3 sposoby dostarczania reakcji na dotyk.

Metody te wykorzystują prymitywy zdefiniowane na poziomie urządzenia, aby dostarczać wysokiej jakości informacje zwrotne dostosowane do danego urządzenia.

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

Używaj komponentów View do generowania reakcji haptycznych

Aby wygenerować reakcję haptyczną, użyj metody View.performHapticFeedback. Stałe haptyczne zdefiniowane przez HapticFeedbackConstants dotyczą ich funkcjonalności w aplikacji, a nie rodzaju wywoływanego efektu haptycznego.

Implementacja bazowa może się różnić w zależności od możliwości urządzenia i sprzętu, ale aplikacja powinna uwzględniać tylko typ opinii, aby podać ją w konkretnym kontekście. Koncentrując się na tej funkcji, możesz włączyć reakcje haptyczne w przypadku podobnych interakcji. Użytkownicy uczą się wiązać różne znaczenia z różnymi odczuciami haptycznymi.

Wymagania wstępne: włącz reakcję na dotyk

Jeśli element View jest widoczny, reakcje haptyczne mogą być używane w przypadku powiązanych z nim zdarzeń. Niektóre zdarzenia, np. przytrzymanie, mają domyślny czujnik haptyczny, który jest wywoływany, gdy odbiornik w widoku danych obsługuje zdarzenie (zwraca true).

View na Androidzie może wyłączyć reakcje haptyczne, ustawiając właściwość View.hapticFeedbackEnabled na false. Wyłączenie tej właściwości spowoduje wyświetlenie domyślnego komunikatu.

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

W przeciwieństwie do innych interfejsów API dotykowych użycie interfejsu HapticFeedbackConstants z elementem View nie wymaga uprawnienia VIBRATE.

Wybierz HapticFeedbackConstant

W przypadku używania komponentów View z HapticFeedbackConstants nie trzeba oceniać obsługi konkretnych urządzeń, ponieważ te stałe w razie potrzeby będą działać w zastępstwie. Jedynym istotnym czynnikiem jest poziom SDK wymaganej stałej.

Przykład 1: naciśnięcie klawisza

Oto przykład, jak dodać reakcję haptyczną do danych wejściowych w View przy użyciu detektorów dotyku. Efekty symulują wrażenie naciśnięcia i puszczenia 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 Prześlij

Przypadki użycia reakcji haptycznych wykraczają poza symulowanie fizycznej interakcji z urządzeniem. Można ich też używać do przekazywania znaczenia abstrakcyjnego. 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 awarii. Zostało to pokazane poniżej przykładem przesłania opinii 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);
  }
});

Aby generować reakcje haptyczne, użyj wstępnie zdefiniowanego elementu VibrationEffect

Metoda oparta na View koncentruje się na interakcjach użytkowników. Najlepiej sprawdza się w celu zachowania spójności w całym systemie. Niektóre wstępnie zdefiniowane interfejsy API VibrationEffect można też wywoływać, aby uzyskać niestandardowe efekty reakcji na dotyk.

Wstępnie zdefiniowane efekty są dostępne jako stałe VibrationEffect i można je sprawdzić pod kątem obsługi i odtwarzać w usłudze Vibrator, jak pokazano w tych przykładach.

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

W podstawowym użyciu nie powinno być potrzeby sprawdzania obsługi poszczególnych interfejsów API VibrationEffect. Interfejsy API takie jak Vibrator.areEffectsSupported i Vibrator.areAllEffectsSupported określają, czy urządzenie ma dostosowaną implementację stałej. Jeśli nie widzisz niestandardowego efektu, aplikacja nadal może odtwarzać efekty i używać implementacji zastępczej zdefiniowanej na platformie.

Więcej informacji znajdziesz w sekcji Wstępnie zdefiniowaneVibrationEffect.

Wymagania wstępne: wczytanie wibracji i uprawnienie VIBRATE

Większość wibracji można odtwarzać w usłudze Vibrator. Mogą one być wczytane w taki 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 urządzenie mogło wibrować przy użyciu tej usługi, aplikacja musi mieć uprawnienie VIBRATE. Uprawnienia można dodać do pliku manifestu aplikacji:

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

Odtwórz wstępnie zdefiniowany utwór VibrationEffect

Wstępnie zdefiniowane efekty można przygotować za pomocą VibrationEffect.createPredefined, a potem odtwarzać za pomocą jednej z metod vibrate na urządzeniu Vibrator.

W tym przykładzie odtwarza się 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));

Używanie zaawansowanych kompozycji z elementami podstawowymi

Interfejs API VibrationEffect.Composition zapewnia dodatkowe możliwości reakcji na dotyk. W przeciwieństwie do efektów elementy podstawowe nie mają jednak elementów zastępczych na poziomie systemu, co oznacza, że należy zwrócić szczególną uwagę na elementy podstawowe i inne funkcje obsługiwane przez urządzenie.

Korzystanie z tych interfejsów API zostało szczegółowo omówione w artykule Tworzenie niestandardowych efektów haptycznych.