Implementowanie stałych i pierwotnych

Stałe i elementy dotykowe są definiowane przez interfejs HAL wibratora i mapowane przez platformę Androida na interfejsy API dostępne publicznie. Aby sprawdzić, czy urządzenie spełnia minimalne wymagania dotyczące implementacji haptyki:

Schemat blokowy procesu implementacji haptycznych

Rysunek 2. Implementowanie efektów

Schemat blokowy czynności implementacji prymitywów

Rysunek 3. Implementowanie elementów podstawowych

Implementowanie stałych

Deweloperzy mogą używać stałych wartości haptycznych w VibrationEffect za pomocą funkcji VibrationEffect.createPredefined(). Sprawdź stan implementacji tych stałych wartości haptycznych.

Stałe dotyczące haptyki Lokalizacje i streszczenia
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect class
Konstante haptyczne w VibrationEffect nie zawierają żadnych informacji o zdarzeniach wejściowych i nie mają elementów interfejsu użytkownika. Stała zawiera zamiast tego poziomy energii, takie jak EFFECT_CLICKEFFECT_HEAVY_CLICK, które są wywoływane przez createPredefined().

Opisane poniżej alternatywne wibracje są wykonywane na urządzeniach, które nie implementują stałych wartości VibrationEffect. Zalecamy zaktualizowanie tych konfiguracji, aby zapewnić optymalną wydajność na takich urządzeniach.

  • EFFECT_CLICK

    Wibracje w postaci fali utworzone za pomocą VibrationEffect.createWaveform i czasów skonfigurowanych w frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  • EFFECT_HEAVY_CLICK

    Wibracje w postaci fali utworzone za pomocą VibrationEffect.createWaveform i czasów ustawionych w frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Wibracje w postaci fali utworzone za pomocą VibrationEffect.createWaveform i czasów trwania (0, 30, 100, 30).

  • EFFECT_TICK

    Wibracje w postaci fali utworzone za pomocą VibrationEffect.createWaveform i czasów skonfigurowanych w frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Schemat blokowy czynności związanych z testowaniem reakcji haptycznej

Rysunek 4. Implementacja stałych wartości opinii

Deweloperzy mogą używać stałych wartości haptycznych w HapticFeedbackConstants za pomocą metody View.performHapticFeedback(). Sprawdź stan tych publicznych stałych wartości reakcji.

Stałe dotyczące haptyki Lokalizacje i streszczenia
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END HapticFeedbackConstants class
Konstante haptyczne w  HapticFeedbackConstants wspomagają zdarzenia wejścia z pewnymi elementami UI, takimi jak KEYBOARD_PRESSKEYBOARD_RELEASE, które są wywoływane przez performHapticFeedback().

Implementowanie elementów podstawowych

VibrationEffect.Compositionmożna skalować intensywność, co pozwala deweloperom na stosowanie addPrimitive(int primitiveId, float scale, int delay). Pierwiastki można podzielić na 2 kategorie:

  • Krótkie prymitywy: prymitywy o krótkim czasie trwania, zwykle krótszym niż 20 ms. Są to CLICK, TICKLOW_TICK.

  • Sygnalizowanie: sygnały o zmiennej amplitudzie i częstotliwości, zazwyczaj trwające dłużej niż sygnały krótkie. Są to SLOW_RISE, QUICK_RISE, QUCK_FALL, THUDSPIN.

Krótkie elementy

Krótkie prymitywy można opisać przy użyciu profilu przyspieszenia wyjściowego silnika wibracyjnego. Częstotliwość bezwzględna zależy od danego prymitywu i zmienia się w zależności od częstotliwości rezonansowej danego aktuatora. Więcej informacji o konfigurowaniu sprzętu i narzędziach do pomiaru wyjścia znajdziesz w artykule Konfigurowanie sprzętu do testowania.

Cenna miara jakości krótkich wibracji to współczynnik pulsu do dzwonienia (PRR), pokazany na rysunku 5. PRR to stosunek głównego impulsu, zdefiniowanego przez sygnał w oknie czasu, w którym amplituda maleje do 10% amplitudy szczytowej, do impulsu pierścieniowego, zdefiniowanego przez sygnał, w którym amplituda maleje z 10% amplitudy szczytowej do mniej niż 1% amplitudy szczytowej. Formuła PRR:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

Więcej informacji o PRR znajdziesz w artykule Analiza przebiegu fali, a więcej o analizowaniu i porównywaniu wyników – w artykule Porównywanie wyników za pomocą mapy wydajności.

Stosunek impulsów do dzwonienia

Rysunek 5. Definicja współczynnika tętna do dzwonka

Stosuj krótkie prymitywy jako informacje zwrotne dotyczące danych wejściowych użytkownika lub odtwarzaj je w dłuższych kompozycjach, aby tworzyć miękkie tekstury. Oznacza to, że są one zwykle często wywoływane i odtwarzane szybko po sobie. Odbierana intensywność pojedynczego krótkiego prymitywu może zwiększać intensywność efektu. Z tego powodu należy skalibrować pojedynczy element typu tick lub low tick za pomocą większej kompozycji, na przykład 100 kolejnych ticków.

Kliknij obiekt

Kliknięcie to silny, wyraźny efekt, który zwykle działa w pobliżu częstotliwości rezonansowej urządzenia, aby osiągnąć maksymalną moc w krótkim czasie. Jest ona silniejsza i głębsza niż inne prymitywy, a jej działanie jest maksymalnie intensywne.

Jeśli to możliwe, użyj przesterowania silnika na początku i aktywnego hamowania na końcu, aby uzyskać krótki czas wzrostu i obniżenia prędkości silnika. W przypadku niektórych silników użycie sygnału prostokątnego zamiast sygnału sinusoidalnego może przyspieszyć przyspieszanie. Na rysunku 6. widać przykładowy profil przyspieszania wyjścia dla komponentu kliknięcia:

Kliknij profil przyspieszania wyjścia

Rysunek 6. Przykład profilu przyspieszania wyjścia dla prymitywu kliknięcia

Parametr Wytyczna
Czas działania

Docelowo: 12 ms

Limit: < 30 ms

Przyspieszenie wyjścia szczytowego

Cel: 2 G

Limit: > 1 G

Częstotliwość w przybliżeniu w częstotliwości rezonansowej.

Element podstawowy „ptaszek” (jasny)

Tick primitive to ostry, krótki efekt, który zwykle działa w wyższym zakresie częstotliwości. Ten typ można też opisać jako kliknięcie o średniej intensywności o wyższej częstotliwości z krótkim ogonem. Te same wskazówki dotyczą uzyskiwania krótkiego czasu narastania za pomocą przesterowania silnika lub sygnału prostokątnego na potrzeby początkowego narastania oraz aktywnego hamowania w przypadku przesunięcia. Rysunek 7 przedstawia przykładowy profil przyspieszenia wyjściowego dla prymitywu tick:

Profil przyspieszenia wyjścia komponentu prostego

Rysunek 7. Przykład profilu przyspieszania wyjścia dla prymitywu tick

Parametr Wytyczna
Czas działania

Docelowo: 5 ms

Limit: < 20 ms

Przyspieszenie wyjścia szczytowego

Docelowo: połowa CLICK, 1 G

Limit: od 0,5 G do 1 G

Częstotliwość

Docelowo: 2-krotne rezonansowe częstotliwości

Limit: < 500 Hz

Podstawowy element znaku

Pierwotny dźwięk tyknięcia w niskim zakresie to łagodniejsza, słabsza wersja dźwięku tyknięcia w niskim zakresie, który działa w niższym zakresie częstotliwości, aby nadać efektowi większą gęstość. Ten prymityw można też opisać jako kliknięcie o średniej intensywności o niższej częstotliwości, które ma być używane wielokrotnie w celu dynamicznego wyświetlania informacji zwrotnych. Te same wskazówki dotyczą osiągania krótkiego czasu narastania za pomocą przesterowania silnika lub sygnału prostokątnego na potrzeby początkowego narastania. Rysunek 8 przedstawia przykładowy profil przyspieszenia wyjściowego dla prymitywu niskoczęstotliwościowego:

Profil przyspieszenia wyjścia prymitywu o niskiej częstotliwości

Rysunek 8. Przykład profilu przyspieszenia wyjścia dla prymitywu o niskiej częstotliwości

Parametr Wytyczna
Czas działania

Docelowo: 12 ms

Limit: < 30 ms

Przyspieszenie wyjścia szczytowego

Cel: 1/4 TICK, 0,25 g

Limit: od 0,2 G do 0,5 G

Częstotliwość

Docelowo: 2/3 częstotliwości rezonansowej

Limit: < 100 Hz

Elementy podstawowe Chirp

Pierwiastki ćwierkania można opisać za pomocą sygnałów wejściowych dotyczących poziomu napięcia i częstotliwości wibracji. Przyspieszenie, które silnik jest w stanie wygenerować w różnych zakresach częstotliwości, zależy od krzywej odpowiedzi częstotliwościowej aktuatora. Zakresy częstotliwości i poziomy napięcia muszą być dostosowane do poszczególnych urządzeń.

Powolne zwiększanie

Powolne wznoszenie to stopniowy wzrost amplitudy i częstliwości z łagodnym początkiem oraz stale wzrastającą intensywnością wibracji. Można go zastosować przez stały skanowanie amplitudy i częstotliwości za pomocą niższego zakresu częstotliwości, który działa poza rezonansem. Rysunek 9 przedstawia parametry wejściowe i przykładowy profil przyspieszenia danych wyjściowych w przypadku tej implementacji. (czerwona linia odpowiada etykietom amplitudy po lewej stronie i przedstawia, jak amplituda wibracji zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i przedstawia, jak częstotliwość wibracji zmienia się w czasie.

Parametry wejściowe i profil przyspieszenia wyjściowego dla powolnego wzrostu

Rysunek 9. Parametry wejściowe i przykład profilu przyspieszenia wyjściowego dla powolnego wzrostu

Jeśli odpowiedź częstotliwościowa silnika jest ograniczona (niewystarczająco odbiega od częstotliwości rezonansowej), alternatywną implementacją jest skanowanie sinusoidalne od 1/2 do 1 raza częstotliwości rezonansowej. Rezonans silnika przyczynia się do osiągnięcia szczytu sygnału na końcu.

Parametr Wytyczna
Czas działania

Cel: 500 ms

Tolerancja: 20 ms

Przyspieszenie wyjścia szczytowego

Docelowo: 0,5 g

Limit: od 0,5 G do 1 G

Częstotliwość

Docelowa wartość: 1/2 do 2/3 częstotliwości rezonansowej

Alternatywnie: 1/2 do częstotliwości rezonansowej

Szybki wzrost

Szybki wzrost to szybsze zwiększanie amplitudy i częstotliwości z łagodnym początkiem oraz stale rosnącą intensywnością wibracji. Docelowe wartości przyspieszenia i częstotliwości wibracji powinny być takie same jak w przypadku prymitywnego sygnału wolnego narastania, ale osiągane w krótszym czasie. Rysunek 10 przedstawia parametry wejściowe wibracji oraz przykładowy profil przyspieszenia wyjściowego dla prymitywu powolnego wzrostu. (czerwona linia odpowiada etykietom amplitudy po lewej stronie i przedstawia, jak amplituda wibracji zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i przedstawia, jak częstotliwość wibracji zmienia się w czasie.

Parametry wejściowe i profil przyspieszenia wyjściowego dla szybkiego wzrostu

Rysunek 10. Parametry wejściowe i przykład profilu przyspieszenia wyjściowego dla szybkiego wzrostu

Parametr Wytyczna
Czas działania

Docelowo: 150 ms

Tolerancja: 20 ms

Przyspieszenie wyjścia szczytowego

Cel: taki sam jak w SLOW_RISE

Limit: taki sam jak w SLOW_RISE

Częstotliwość

Cel: taki sam jak w SLOW_RISE

Opcja: taka sama jak w hotelu SLOW_RISE

Szybki spadek

Szybkie opadanie to szybkie obniżanie amplitudy i częstotliwości z łagodnym początkiem. Jako punktu wyjścia możesz użyć wyższej częstotliwości, gdy silnik przyspiesza, aby osiągnąć maksymalne przyspieszenie wyjściowe. Częstotliwość powinna stale spadać w całym zakresie skanowania, nawet w czasie narastania. Rysunek 11 przedstawia parametry wejściowe i przykładowy profil przyspieszenia danych wyjściowych w przypadku tej implementacji. (czerwona linia odpowiada etykietom amplitudy po lewej stronie i przedstawia, jak amplituda wibracji zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i przedstawia, jak częstotliwość wibracji zmienia się w czasie.

Parametry wejściowe i profil przyspieszenia wyjściowego dla szybkiego spadku

Rysunek 11. Parametry wejściowe i przykład profilu przyspieszenia wyjściowego dla szybkiego spadku

Parametr Wytyczna
Czas działania

Docelowo: 100 ms

Tolerancja: 20 ms

Przyspieszenie wyjścia szczytowego

Docelowo: 1 G.

Limit: od 0,5 G do 2 G

Częstotliwość

Docelowa wartość: 2 do 1 raza częstotliwość rezonansowa

Element podstawowy Thud

Thud to głośny, niski efekt perkusyjny, który symuluje fizyczne wrażenie pukania w puste drewno. Ten prymityw działa w zakresie niskiej częstotliwości, podobnie jak prymityw low tick, aby zapewnić większą płynność efektu. Możesz zaimplementować dźwięk uderzenia jako spadek amplitudy i częstotliwości w niższym zakresie częstotliwości (najlepiej poniżej 100 Hz). Rysunek 12 przedstawia parametry wejściowe i przykładowy profil przyspieszenia wyjściowego w przypadku tej implementacji. (czerwona linia odpowiada etykietom amplitudy po lewej stronie i przedstawia, jak amplituda wibracji zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i przedstawia, jak częstotliwość wibracji zmienia się w czasie.

Parametry wejściowe i profil przyspieszenia wyjściowego dla komponentu uderzenia

Rysunek 12. Parametry wejściowe i przykład profilu przyspieszenia wyjściowego dla prymitywu dźwięku

Jeśli odpowiedź częstotliwościowa silnika jest ograniczona, można zastosować alternatywne rozwiązanie, zaczynając od sygnału napędowego o pełnej intensywności przy częstotliwości rezonansowej i zmniejszając ją do najniższej możliwej częstotliwości, którą można jeszcze wyczuć. Aby wibracje były odczuwalne, może być konieczne zwiększenie intensywności sygnału napędu przy niższej częstotliwości.

Parametr Wytyczna
Czas działania

Docelowo: 300 ms

Tolerancja: 20 ms

Przyspieszenie wyjścia szczytowego

Docelowo: 0,25 g

Limit: od 0,2 G do 0,5 G

Częstotliwość

Docelowa wartość: 1/2 do 1/3 częstotliwości rezonansowej

Alternatywa: 1 x do 1/2 częstotliwości rezonansowej

Podstawowy obiekt wirowania

Obrót symuluje szybkie obracanie się wokół własnej osi z lekko zaznaczonym środkiem. Obrócenie można zaimplementować, przesuwając amplitudę i częstotliwość niezależnie, w przeciwnych kierunkach, a następnie odwrotnie. Ważne jest używanie niższego zakresu częstotliwości (najlepiej poniżej 100 Hz). Na rysunku 13 przedstawiono parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla tej implementacji. (czerwona linia odpowiada etykietom amplitudy po lewej stronie i przedstawia, jak amplituda wibracji zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i przedstawia, jak częstotliwość wibracji zmienia się w czasie.

Aby uzyskać efekt wirowania i niestabilności, zalecamy wywołanie prymitywu wirowania 2 razy z rzędu lub 3 razy w kompozycjach.

Jeśli odpowiedź częstotliwościowa silnika jest ograniczona, alternatywną implementacją jest szybkie przeskanowanie sinusa od 1/2x do 1x częstotliwości rezonansowej i z powrotem. Rezonans silnika automatycznie nadaje sygnałowi akcent w środku.

Parametry wejściowe i profil przyspieszenia wyjściowego dla komponentu obrotu

Rysunek 13. Parametry wejściowe i przykład profilu przyspieszenia wyjściowego dla prymitywu obrotu

Parametr Wytyczna
Czas działania

Docelowo: 150 ms

Tolerancja: 20 ms

Przyspieszenie wyjścia szczytowego

Docelowo: 0,5 g

Limit: od 0,25 g do 0,75 g

Częstotliwość

Docelowo: 2/3 do 1/3, a potem z powrotem do 1/2 częstotliwości rezonansowej

Alternatywa: 2/3 do 1 x, a następnie z powrotem do 1/2 częstotliwości rezonansowej