Implementowanie stałych i pierwotnych

Stałe i elementy pierwotne haptyczne są zdefiniowane przez HAL wibratora i mapowane przez platformę Android na publiczne interfejsy API. Aby sprawdzić, czy Twoje urządzenie spełnia minimalne wymagania dotyczące wdrożenia haptyki:

Schemat blokowy procesu implementacji reakcji haptycznych

Rysunek 2. Wdrażanie efektów

Schemat blokowy kroków wdrażania elementów podstawowych

Rysunek 3. Implementowanie elementów podstawowych

Wdrażanie stałych

Stałe haptyczne w klasie VibrationEffect mogą być używane przez programistów za pomocą metody VibrationEffect.createPredefined(). Sprawdź stan implementacji tych stałych haptycznych.

Stałe haptyczne Lokalizacje i podsumowania
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect class
Stałe haptyczne w VibrationEffect nie zawierają żadnych zdarzeń wejścia i nie mają elementów interfejsu. Stałe obejmują pojęcie poziomów energii, np. EFFECT_CLICKEFFECT_HEAVY_CLICK, które są wywoływane przez createPredefined().

Alternatywne wibracje opisane poniżej są wykonywane na urządzeniach, które nie implementują stałych VibrationEffect. Zalecamy zaktualizowanie tych konfiguracji, aby działały jak najlepiej na takich urządzeniach.

  • EFFECT_CLICK

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

  • EFFECT_HEAVY_CLICK

    Wibracje o kształcie fali utworzone za pomocą funkcji VibrationEffect.createWaveform i czasów skonfigurowanych w frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Wibracje o kształcie fali utworzone za pomocą funkcji VibrationEffect.createWaveform i czasów (0, 30, 100, 30).

  • EFFECT_TICK

    Wibracje o określonym kształcie fali utworzone za pomocą funkcji VibrationEffect.createWaveform i czasów skonfigurowanych w frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Schemat blokowy kroków testowania wibracji

Rysunek 4. Implementowanie stałych opinii

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

Stałe haptyczne Lokalizacje i podsumowania
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 Klasa HapticFeedbackConstants
Stałe haptyczne w  HapticFeedbackConstants zdarzeniach wejściowych HapticFeedbackConstants pomagają w przypadku niektórych elementów interfejsu, takich jak KEYBOARD_PRESSKEYBOARD_RELEASE, które są wywoływane przez performHapticFeedback().

Implementowanie elementów podstawowych

Prymitywne wibracje w VibrationEffect.Composition mają skalowalną intensywność, którą deweloperzy mogą wykorzystywać za pomocą addPrimitive(int primitiveId, float scale, int delay). Elementy pierwotne można podzielić na 2 kategorie:

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

  • Chirp primitives: prymitywy o różnej amplitudzie i częstotliwości, zwykle trwające dłużej niż krótkie prymitywy. Są to SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD i SPIN.

Krótkie elementy podstawowe

Krótkie elementy pierwotne można opisać za pomocą profilu przyspieszenia wyjściowego silnika wibracyjnego. Częstotliwość bezwzględna używana w przypadku poszczególnych elementów pierwotnych różni się w zależności od częstotliwości rezonansowej siłownika. Więcej informacji o konfiguracji sprzętu i narzędzi do pomiaru mocy wyjściowej znajdziesz w artykule Konfigurowanie sprzętu testowego.

Ważnym wskaźnikiem jakości krótkich wibracji jest stosunek impulsu do dzwonka (PRR), pokazany na rysunku 5. PRR to stosunek między głównym impulsem, określonym przez sygnał w oknie czasowym, w którym amplituda spada do 10% amplitudy szczytowej, a impulsem dzwonka, określonym przez sygnał, w którym amplituda spada z 10% amplitudy szczytowej do mniej niż 1% amplitudy szczytowej. Wzór na PRR to:

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

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

Stosunek impulsów do dzwonków

Rysunek 5. Definicja stosunku impulsów do dzwonienia

Stosuj krótkie elementy pierwotne jako dane wejściowe 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 odgrywane w szybkiej kolejności. Postrzegana intensywność pojedynczego krótkiego prymitywu może zwiększać intensywność większego efektu. Z tego powodu skalibruj pojedynczy znacznik lub mały znacznik pierwotny za pomocą większej kompozycji, np. 100 kolejnych znaczników.

Kliknij element podstawowy

Kliknięcie to wyraźny efekt, który zwykle działa w pobliżu częstotliwości rezonansowej urządzenia, aby w krótkim czasie osiągnąć maksymalną moc wyjściową. Jest silniejszy i głębszy niż inne kształty podstawowe, a jego intensywność jest maksymalna.

Jeśli to możliwe, użyj na początku trybu overdrive silnika, a na końcu aktywnego hamowania, aby uzyskać krótki czas wzrostu i spadku mocy silnika. W przypadku niektórych silników użycie fali prostokątnej zamiast sinusoidalnej może zapewnić szybsze przyspieszenie. Na rysunku 6 przedstawiono przykładowy profil przyspieszenia wyjścia dla komponentu kliknięcia:

Kliknij profil przyspieszenia danych wyjściowych komponentu

Rysunek 6. Przykład profilu przyspieszenia danych wyjściowych dla elementu kliknięcia

Parametr Wytyczna
Czas trwania

Cel: 12 ms

Limit: < 30 ms

Maksymalne przyspieszenie wyjściowe

Cel: 2 G

Limit: > 1 G

Częstotliwość W przybliżeniu przy częstotliwości rezonansowej

Podstawowy element znacznika (jasny znacznik)

Prymityw „tick” to krótki, ostry efekt, który zwykle działa w wyższym zakresie częstotliwości. Ten wzorzec można też opisać jako kliknięcie o średniej intensywności, które występuje z większą częstotliwością i ma krótki ogon. Te same wskazówki dotyczą uzyskiwania krótkiego czasu narastania za pomocą przesterowania silnika lub fali prostokątnej na początku oraz aktywnego hamowania przy przesunięciu. Na rysunku 7 przedstawiono przykładowy profil przyspieszenia dla elementu tick:

Profil przyspieszenia danych wyjściowych komponentu cyklu

Rysunek 7. Przykład profilu przyspieszenia wyjściowego dla elementu tick

Parametr Wytyczna
Czas trwania

Cel: 5 ms

Limit: < 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: połowa CLICK, 1 G

Limit: od 0,5 G do 1 G

Częstotliwość

Docelowa: 2-krotność częstotliwości rezonansowej

Limit: < 500 Hz

Podstawowy znacznik o niskiej wartości

Słabe wibracje to łagodniejsza, słabsza wersja lekkich wibracji, działająca w niższym zakresie częstotliwości, aby nadać efektowi większą intensywność. Ten rodzaj wibracji można też opisać jako kliknięcie o średniej intensywności i niższej częstotliwości, które ma być używane wielokrotnie w celu dynamicznego przekazywania informacji zwrotnych. Te same wskazówki dotyczą uzyskiwania krótkiego czasu narastania za pomocą przesterowania silnika lub fali prostokątnej na początku. Ilustracja 8 przedstawia przykładowy profil przyspieszenia danych wyjściowych dla elementu low_tick:

Profil przyspieszenia danych pierwotnych o niskiej częstotliwości

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

Parametr Wytyczna
Czas trwania

Cel: 12 ms

Limit: < 30 ms

Maksymalne przyspieszenie wyjściowe

Cel: 1/4 TICK, 0,25 G

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

Częstotliwość

Docelowa: 2/3 częstotliwości rezonansowej

Limit: < 100 Hz

Elementy podstawowe Chirp

Prymitywy Chirp można opisać za pomocą sygnałów wejściowych dotyczących poziomu napięcia i częstotliwości wibracji. Przyspieszenie, jakie silnik może osiągnąć w różnych zakresach częstotliwości, zależy od krzywej odpowiedzi częstotliwościowej siłownika. Zakresy częstotliwości i poziomy napięcia należy dostosowywać do każdego urządzenia z osobna.

Slow rise primitive

Powolne zwiększanie to powolne zwiększanie amplitudy i częstotliwości z łagodnym początkiem i stale rosnącą intensywnością wibracji. Można to osiągnąć poprzez ciągłe zmienianie amplitudy i częstotliwości w niższym zakresie częstotliwości, który działa poza rezonansem. Ilustracja 9 przedstawia parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla tej implementacji. (Czerwona linia odpowiada etykietom amplitudy po lewej stronie i pokazuje, jak amplituda drgań zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i pokazuje, jak częstotliwość wibracji zmienia się w czasie).

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

Rysunek 9. Parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla wolnego wzrostu

Jeśli odpowiedź częstotliwościowa silnika jest ograniczona (nie jest wystarczająco silna poza częstotliwością rezonansową), alternatywnym rozwiązaniem jest przebieg sinusoidalny od 1/2x do 1x częstotliwości rezonansowej. Rezonans silnika przyczynia się do osiągnięcia szczytu sygnału na końcu.

Parametr Wytyczna
Czas trwania

Cel: 500 ms

Tolerancja: 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: 0,5 G

Limit: od 0,5 G do 1 G

Częstotliwość

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

Alternatywa: 1/2 częstotliwości rezonansowej

Podstawowy element szybkiego wzrostu

Szybki wzrost to szybsze zwiększanie amplitudy i częstotliwości wibracji z łagodnym początkiem i stale rosnącą intensywnością. Docelowe wartości przyspieszenia i częstotliwości wibracji powinny być takie same jak w przypadku elementu podstawowego „powolny wzrost”, ale osiągane w krótszym czasie. Ilustracja 10 przedstawia parametry wejściowe wibracji i przykładowy profil przyspieszenia wyjściowego dla elementu pierwotnego powolnego wzrostu. (Czerwona linia odpowiada etykietom amplitudy po lewej stronie i pokazuje, jak amplituda drgań zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i pokazuje, jak częstotliwość wibracji zmienia się w czasie).

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

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

Parametr Wytyczna
Czas trwania

Wartość docelowa: 150 ms

Tolerancja: 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: taki sam jak w przypadku SLOW_RISE

Limit: taki sam jak w przypadku SLOW_RISE

Częstotliwość

Cel: taki sam jak w przypadku SLOW_RISE

Alternatywa: taka sama cena jak w hotelu SLOW_RISE

Podstawowy element szybkiego spadania

Szybki spadek to szybki spadek amplitudy i częstotliwości z łagodnym początkiem. Możesz użyć wyższej częstotliwości jako punktu wyjścia, gdy silnik zwiększa prędkość, aby osiągnąć maksymalne przyspieszenie wyjściowe. Częstotliwość powinna stale maleć w całym zakresie, nawet w czasie narastania. Ilustracja 11 przedstawia parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla tej implementacji. (Czerwona linia odpowiada etykietom amplitudy po lewej stronie i pokazuje, jak amplituda drgań zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i pokazuje, jak częstotliwość wibracji zmienia się w czasie).

Parametry wejściowe i wyjściowy profil przyspieszenia dla prymitywu szybkiego upadku

Rysunek 11. Parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla szybkiego upadku

Parametr Wytyczna
Czas trwania

Cel: 100 ms

Tolerancja: 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: 1 G

Limit: od 0,5 G do 2 G

Częstotliwość

Docelowa: 2-krotność do 1-krotności częstotliwości rezonansowej

Thud primitive

Odgłos ten to niski, perkusyjny efekt, który symuluje fizyczne wrażenie pukania w puste drewno. Ten element działa w zakresie niskich częstotliwości, podobnie jak element „low tick”, aby nadać efektowi większą głębię. Możesz zaimplementować dźwięk uderzenia jako opadającą amplitudę i częstotliwość w niższym zakresie częstotliwości (najlepiej poniżej 100 Hz). Na rysunku 12 pokazano parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla tej implementacji. (Czerwona linia odpowiada etykietom amplitudy po lewej stronie i pokazuje, jak amplituda drgań zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i pokazuje, jak częstotliwość wibracji zmienia się w czasie).

Parametry wejściowe i profil przyspieszenia wyjściowego dla elementu pierwotnego uderzenia

Rysunek 12. Parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla prymitywu uderzenia

Jeśli pasmo przenoszenia silnika jest ograniczone, alternatywnym rozwiązaniem jest rozpoczęcie od sygnału sterującego o pełnej intensywności przy częstotliwości rezonansowej i obniżenie go do najniższej możliwej częstotliwości, która jest nadal wyczuwalna. Takie podejście może wymagać zwiększenia intensywności sygnału sterującego przy niższej częstotliwości, aby można było poczuć wibracje.

Parametr Wytyczna
Czas trwania

Cel: 300 ms

Tolerancja: 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: 0,25 G

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

Częstotliwość

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

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

Podstawowy element wirowania

Obrót symuluje rozpędzenie szybkiego obrotu w górę i w dół z lekkim akcentem pośrodku. Obrót można uzyskać, zmieniając amplitudę i częstotliwość niezależnie, w przeciwnych kierunkach, a następnie wykonując ruch w przeciwnym kierunku. Ważne jest, aby używać niższego zakresu częstotliwości (najlepiej poniżej 100 Hz). Na rysunku 13 pokazano parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla tej implementacji. (Czerwona linia odpowiada etykietom amplitudy po lewej stronie i pokazuje, jak amplituda drgań zmienia się w czasie. Niebieska linia odpowiada etykietom częstotliwości po prawej stronie i pokazuje, jak częstotliwość wibracji zmienia się w czasie).

Zalecamy, aby w celu uzyskania efektu wirowania i niestabilności prymityw obrotu był wywoływany 2 razy z rzędu lub 3 razy w kompozycjach.

Jeśli pasmo przenoszenia silnika jest ograniczone, alternatywnym rozwiązaniem jest szybkie przesuwanie częstotliwości sinusoidy 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 wyjściowy profil przyspieszenia dla komponentu obrotu

Rysunek 13. Parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla podstawowej animacji obrotu

Parametr Wytyczna
Czas trwania

Wartość docelowa: 150 ms

Tolerancja: 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: 0,5 G

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

Częstotliwość

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

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