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 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 obejmują żadnych zdarzeń wejściowych 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 zapewnić optymalne działanie 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 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 reakcji haptycznej

Rysunek 4. Implementowanie stałych opinii

Stałe haptyczne w klasie HapticFeedbackConstants mogą być używane przez deweloperów za pomocą metody View.performHapticFeedback(). Sprawdź stan tych stałych opinii publicznych:

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 HapticFeedbackConstants class
Stałe haptyczne w HapticFeedbackConstants zdarzeniach wejściowych 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 poniżej 20 ms. Są to CLICK, TICKLOW_TICK.

  • Chirp primitives: primitives o różnej amplitudzie i częstotliwości, zwykle o dłuższym czasie trwania niż krótkie primitives. 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 różni się w przypadku poszczególnych elementów pierwotnych, 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.

Wartościowym wskaźnikiem jakości krótkich wibracji jest stosunek impulsu do dzwonka (PRR), pokazany na rysunku 5. PRR to stosunek głównego impulsu, zdefiniowanego przez sygnał w oknie czasowym, w którym amplituda spada do 10% amplitudy szczytowej, do impulsu dzwonka, zdefiniowanego 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 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 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 występuje 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żywaj 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 przyspieszyć 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 wyjściowego dla elementu kliknięcia

Parametr Wytyczna
Czas działania

Cel: 12 ms

Limit: < 30 ms

Maksymalne przyspieszenie wyjściowe

Cel: 2 G

Limit: > 1 GB

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

Element podstawowy znacznika (jasny znacznik)

Prymityw „tick” to krótki, ostry efekt, który zwykle działa w wyższym zakresie częstotliwości. Ten typ kliknięcia 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 działania

Cel: 5 ms

Limit: < 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: połowa z CLICK, 1 G

Limit: od 0,5 G do 1 G

Częstotliwość

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

Limit: < 500 Hz

Podstawowy znacznik o niskiej wartości

Słabe kliknięcie to łagodniejsza i słabsza wersja lekkiego kliknięcia, która działa w niższym zakresie częstotliwości, aby nadać efektowi większą głębię. Ten rodzaj wibracji można też opisać jako kliknięcie o średniej intensywności i niskiej 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. Rysunek 8 przedstawia przykładowy profil przyspieszenia wyjściowego dla elementu low_tick:

Profil przyspieszenia danych pierwotnych o niskiej częstotliwości

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

Parametr Wytyczna
Czas działania

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ść

Cel: 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.

Podstawowy element powolnego wzrostu

Powolny wzrost 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ąć przez równomierne przesuwanie zarówno amplitudy, jak i częstotliwości, przy użyciu niższego zakresu 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 o powolnym wzroście

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 działania

Cel: 500 ms

Tolerancja: 20 ms

Maksymalne przyspieszenie wyjściowe

Cel: 0,5 G

Limit: od 0,5 G do 1 G

Częstotliwość

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

Alternatywa: 1/2 częstotliwości rezonansowej

Szybki wzrost

Szybki wzrost to szybsze zwiększanie amplitudy i częstotliwości w górę z łagodnym początkiem i stale rosnącą intensywnością wibracji. Docelowe wartości przyspieszenia i częstotliwości wibracji powinny być takie same jak w przypadku powolnego wzrostu, ale osiągane w krótszym czasie. Na rysunku 10 pokazano parametry wejściowe wibracji i przykładowy profil przyspieszenia wyjściowego dla prymitywu 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 szybkiego wzrostu

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

Parametr Wytyczna
Czas działania

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

Szybki spadek

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. Na ilustracji 11 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 szybkiego upadku

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

Parametr Wytyczna
Czas działania

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

Element podstawowy „Thud”

Odgłos stukania to niski, perkusyjny efekt, który symuluje fizyczne odczucie stukania 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 komponentu uderzenia

Rysunek 12. Parametry wejściowe i przykładowy profil przyspieszenia wyjściowego dla elementu pierwotnego „thud”

Jeśli pasmo przenoszenia silnika jest ograniczone, alternatywnym rozwiązaniem jest rozpoczęcie od sygnału 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 działania

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 szybki ruch w górę i w dół z lekkim akcentem na środku. Obrót można uzyskać, zmieniając amplitudę i częstotliwość niezależnie od siebie, w przeciwnych kierunkach, a następnie wykonując ruch w przeciwną stronę. 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 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ładowy profil przyspieszenia wyjściowego dla podstawowej animacji obrotu

Parametr Wytyczna
Czas działania

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