Haptische Konstanten und Primitiven werden durch die Vibrator-HAL definiert und vom Android-Framework öffentlichen APIs zugeordnet. Führen Sie die folgenden Prüfungen durch, um festzustellen, ob Ihr Gerät die Mindestanforderungen für die Implementierung von Haptik erfüllt:
Abbildung 2: Effekte implementieren
Abbildung 3: Primitive implementieren
Konstanten implementieren
Haptische Konstanten in VibrationEffect können von Entwicklern über VibrationEffect.createPredefined() verwendet werden. Prüfen Sie den Implementierungsstatus der folgenden haptischen Konstanten.
Haptische Konstanten | Standorte und Zusammenfassungen |
---|---|
EFFECT_TICK , EFFECT_CLICK ,
EFFECT_HEAVY_CLICK ,
EFFECT_DOUBLE_CLICK |
VibrationEffect
classHaptische Konstanten in VibrationEffect enthalten keine Informationen zu Eingabeereignissen und haben keine UI-Elemente. Konstanten umfassen stattdessen den Begriff der Energieniveaus, z. B. EFFECT_CLICK und EFFECT_HEAVY_CLICK , die von
createPredefined() aufgerufen werden. |
Die als Nächstes beschriebenen alternativen Vibrationen werden auf Geräten ausgeführt, die die VibrationEffect
-Konstanten nicht implementieren. Es wird empfohlen, diese Konfigurationen zu aktualisieren, damit sie auf solchen Geräten optimal funktionieren.
EFFECT_CLICK
Mit
VibrationEffect.createWaveform
erstellte Wellenform-Vibration und unterframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
konfigurierte Zeitsteuerung.EFFECT_HEAVY_CLICK
Die Wellenform-Vibration wird mit
VibrationEffect.createWaveform
erstellt und die Zeitsteuerung wird unterframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
konfiguriert.EFFECT_DOUBLE_CLICK
Wellenform-Vibration, die mit
VibrationEffect.createWaveform
und den Zeitangaben (0, 30, 100, 30) erstellt wurde.EFFECT_TICK
Mit
VibrationEffect.createWaveform
erstellte Wellenform-Vibration und unterframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
konfigurierte Zeitsteuerung.
Abbildung 4: Feedbackkonstanten implementieren
Haptische Konstanten in HapticFeedbackConstants können von Entwicklern über View.performHapticFeedback() verwendet werden. Prüfen Sie den Status der folgenden öffentlichen Feedbackkonstanten.
Haptische Konstanten | Standorte und Zusammenfassungen |
---|---|
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 |
Klasse HapticFeedbackConstants Haptische Konstanten in HapticFeedbackConstants unterstützen Eingabeereignisse
mit bestimmten UI-Elementen wie KEYBOARD_PRESS und
KEYBOARD_RELEASE , die von
performHapticFeedback() aufgerufen werden. |
Primitive implementieren
Haptische Primitiven in VibrationEffect.Composition
haben eine skalierbare Intensität, die Entwickler über addPrimitive(int primitiveId, float scale, int delay)
verwenden können.
Die Primitiven lassen sich in zwei Kategorien unterteilen:
Kurze Primitives:Primitives mit kurzer Dauer, in der Regel weniger als 20 ms. Dazu gehören
CLICK
,TICK
undLOW_TICK
.Chirp-Primitiven:Primitiven mit unterschiedlicher Amplitude und Frequenz, die in der Regel länger als kurze Primitiven sind. Dazu gehören
SLOW_RISE
,QUICK_RISE
,QUCK_FALL
,THUD
undSPIN
.
Short-Primitive
Kurze Primitives können durch das Beschleunigungsprofil des Vibratormotors beschrieben werden. Die verwendete absolute Frequenz variiert für jedes Primitive in Abhängigkeit von der Resonanzfrequenz des Aktuators. Weitere Informationen zur Hardwareeinrichtung und zu Tools zum Messen der Ausgabe finden Sie unter Testgeräte einrichten.
Ein wichtiger Qualitätsmesswert für kurze Vibrationen ist das Verhältnis von Impuls zu Klingeln (Pulse to Ring Ratio, PRR), das in Abbildung 5 dargestellt ist. Die PRR ist das Verhältnis zwischen dem Hauptpuls, der durch das Signal innerhalb des Zeitfensters definiert wird, in dem die Amplitude auf 10% der Spitzenamplitude abnimmt, und dem Ringpuls, der durch das Signal definiert wird, in dem die Amplitude von 10% der Spitzenamplitude auf weniger als 1% der Spitzenamplitude abnimmt. Die Formel für die Wahrscheinlichkeit für eine Reichweitensteigerung lautet:
Weitere Informationen zu PRR finden Sie unter Wellenform analysieren. Weitere Informationen zum Analysieren und Vergleichen von Ergebnissen finden Sie unter Ergebnisse mit der Leistungskarte vergleichen.
Abbildung 5: Definition des Verhältnisses zwischen Impuls und Klingeln
Wenden Sie kurze Primitives als Feedback für Nutzereingaben an oder spielen Sie sie in längeren Kompositionen ab, um weiche Texturen zu erzeugen. Das bedeutet, dass sie in der Regel häufig ausgelöst und kurz nacheinander abgespielt werden. Die wahrgenommene Intensität eines einzelnen kurzen Primitivs kann die größere Effektintensität verstärken. Kalibrieren Sie daher ein einzelnes Tick- oder Low-Tick-Primitive mit einer größeren Komposition, z. B. 100 aufeinanderfolgende Ticks.
Klick-Primitive
Das Klick-Primitive ist ein starker, prägnanter Effekt, der in der Regel nahe der Resonanzfrequenz eines Geräts arbeitet, um in kurzer Zeit die maximale Leistung zu erreichen. Sie ist stärker und tiefer als die anderen Primitiven und wird mit maximaler Intensität ausgeführt.
Verwenden Sie, falls verfügbar, am Anfang den Motor-Overdrive und am Ende die aktive Bremsung, um eine kurze Anstiegs- und Abfallzeit des Motors zu erreichen. Bei einigen Motoren kann durch die Verwendung einer Rechteckwelle anstelle einer Sinuswelle eine schnellere Beschleunigung erreicht werden. Abbildung 6 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Klick-Primitiv:
Abbildung 6 Beispiel für das Ausgabebeschleunigungsprofil für das Klick-Primitive
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 12 ms Limit: < 30 ms |
Beschleunigung der Spitzenleistung |
Ziel: 2 G Grenzwert: > 1 G |
Häufigkeit | Ungefähr bei Resonanzfrequenz |
Tick-Primitive (leichter Tick)
Das Tick-Primitive ist ein scharfer, kurzer Effekt, der normalerweise in einem höheren Frequenzbereich auftritt. Dieses Primitive kann auch als Klick mittlerer Intensität mit höherer Häufigkeit und kurzem Tail beschrieben werden. Dasselbe gilt für das Erreichen einer kurzen Anstiegszeit durch Motor-Overdrive oder eine Rechteckwelle für den anfänglichen Beginn und aktives Bremsen am Offset. Abbildung 7 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Tick-Primitive:
Abbildung 7. Beispiel für das Ausgabebeschleunigungsprofil für das Tick-Primitive
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 5 ms Grenzwert: < 20 ms |
Beschleunigung der Spitzenleistung |
Ziel: Hälfte von Grenzwert: zwischen 0,5 G und 1 G |
Häufigkeit |
Ziel: 2 × Resonanzfrequenz Grenzwert: < 500 Hz |
Primitive für niedrige Ticks
Der Low-Tick-Primitive ist eine weichere, schwächere Version eines Light-Ticks, die in einem niedrigeren Frequenzbereich arbeitet, um dem Effekt mehr Fülle zu verleihen. Dieses Primitive kann auch als Klick mittlerer Intensität bei niedrigerer Frequenz beschrieben werden, der wiederholt für dynamisches Feedback verwendet werden soll. Die gleichen Richtlinien gelten für eine kurze Anstiegszeit durch Motor-Overdrive oder eine Rechteckwelle für den ersten Anstieg. Abbildung 8 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Low-Tick-Primitive:
Abbildung 8. Beispiel für das Ausgabebeschleunigungsprofil für ein Low-Tick-Primitive
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 12 ms Limit: < 30 ms |
Beschleunigung der Spitzenleistung |
Ziel: 1/4 Grenzwert: Zwischen 0,2 G und 0,5 G |
Häufigkeit |
Ziel: 2/3 der Resonanzfrequenz Grenzwert: < 100 Hz |
Chirp-Primitive
Chirp-Primitiven können durch die Eingangssignale für Spannungspegel und Vibrationsfrequenz beschrieben werden. Die Beschleunigung, die der Motor in verschiedenen Frequenzbereichen ausgeben kann, hängt von der Frequenzgangkurve des Aktuators ab. Die Frequenzbereiche und Spannungspegel müssen für jedes Gerät angepasst werden.
Primitiv für langsamen Anstieg
Der langsame Anstieg ist ein langsamer Amplituden- und Frequenzsweep nach oben mit sanftem Beginn und gleichmäßig ansteigender Vibrationsintensität über den Sweep hinweg. Sie kann durch einen konsistenten Sweep sowohl der Amplitude als auch der Frequenz implementiert werden, wobei ein niedrigerer Frequenzbereich verwendet wird, der nicht auf Resonanz basiert. Abbildung 9 zeigt die Eingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)
Abbildung 9. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „Langsamer Anstieg“
Wenn der Frequenzgang des Motors begrenzt ist (nicht stark genug außerhalb seiner Resonanzfrequenz), ist eine alternative Implementierung ein Sinus-Sweep von 1/2x bis 1x der Resonanzfrequenz. Die Motorresonanz trägt dazu bei, dass am Ende der Signalpeak erreicht wird.
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 500 ms Toleranz: 20 ms |
Beschleunigung der Spitzenleistung |
Ziel: 0,5 G Grenzwert: zwischen 0,5 G und 1 G |
Häufigkeit |
Ziel: 1/2 bis 2/3 der Resonanzfrequenz Alternative: 1/2 bis Resonanzfrequenz |
Primitiv für schnellen Anstieg
Der schnelle Anstieg ist ein schnellerer Amplituden- und Frequenzsweep nach oben mit sanftem Beginn und gleichmäßig ansteigender Vibrationsintensität über den Sweep hinweg. Die Ziele für die Beschleunigung und die Vibrationsfrequenz der Ausgabe sollten mit denen des Primitivs für den langsamen Anstieg übereinstimmen, aber in kürzerer Zeit erreicht werden. Abbildung 10 zeigt die Parameter für die Vibrationseingabe und ein Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „Langsame Steigerung“. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)
Abbildung 10. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „Schneller Anstieg“
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 150 ms Toleranz: 20 ms |
Beschleunigung der Spitzenleistung |
Ziel: wie Limit: wie |
Häufigkeit |
Ziel: wie Alternative: Wie |
Primitiv für schnellen Fall
Der schnelle Fall ist ein schneller Abwärtssweep von Amplitude und Frequenz mit einem weichen Beginn. Sie können eine höhere Frequenz als Startpunkt verwenden, während der Motor hochfährt, um die Beschleunigung der Spitzenleistung zu erreichen. Die Häufigkeit sollte während des gesamten Sweeps kontinuierlich abnehmen, auch während der Anstiegszeit. Abbildung 11 zeigt die Eingabeparameter und ein Beispiel für das Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)
Abbildung 11. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „schneller Fall“
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 100 ms Toleranz: 20 ms |
Beschleunigung der Spitzenleistung |
Ziel: 1 G Grenzwert: zwischen 0,5 G und 2 G |
Häufigkeit |
Ziel: 2- bis 1-mal die Resonanzfrequenz |
Thud-Primitive
Der dumpfe Schlag ist ein tiefes, perkussives Geräusch, das das Gefühl simuliert, auf hohles Holz zu klopfen. Dieses Primitive arbeitet in einem niedrigen Frequenzbereich, ähnlich dem Low-Tick-Primitive, um dem Effekt mehr Fülle zu verleihen. Sie können das „Thud“-Primitive als Abwärtssweep von Amplitude und Frequenz in einem niedrigeren Frequenzbereich (vorzugsweise unter 100 Hz) implementieren. Abbildung 12 zeigt die Eingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)
Abbildung 12. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das „Thud“-Primitive
Wenn der Frequenzgang des Motors begrenzt ist, kann man alternativ mit einem Antriebssignal mit voller Intensität bei der Resonanzfrequenz beginnen und auf die niedrigstmögliche Frequenz fallen, die noch wahrgenommen werden kann. Bei diesem Ansatz muss möglicherweise die Intensität des Treibersignals bei der niedrigeren Frequenz erhöht werden, damit die Vibration spürbar ist.
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 300 ms Toleranz: 20 ms |
Beschleunigung der Spitzenleistung |
Ziel: 0,25 G Grenzwert: Zwischen 0,2 G und 0,5 G |
Häufigkeit |
Ziel: 1/2 bis 1/3 der Resonanzfrequenz Alternative: 1- bis 1/2-fache Resonanzfrequenz |
Primitiv für Drehen
Der Spin simuliert eine schnelle Auf- und Abwärtsbewegung mit einem leichten Akzent in der Mitte. Der Spin kann durch unabhängiges Durchlaufen von Amplitude und Frequenz in entgegengesetzten Richtungen und anschließende Umkehrung der Bewegung implementiert werden. Es ist wichtig, einen niedrigeren Frequenzbereich zu verwenden (vorzugsweise unter 100 Hz). Abbildung 13 zeigt die Eingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)
Wir empfehlen, das Spin-Primitive zweimal hintereinander oder dreimal in Kompositionen aufzurufen, um ein Gefühl von Drehung und Unruhe zu erzeugen.
Wenn der Frequenzgang des Motors begrenzt ist, kann alternativ ein schneller Sinus-Sweep von 1/2x bis 1x der Resonanzfrequenz und zurück durchgeführt werden. Die Motorresonanz verleiht dem Signal automatisch einen Akzent in der Mitte.
Abbildung 13. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für ein Spin-Primitive
Parameter | Richtlinie |
---|---|
Dauer |
Ziel: 150 ms Toleranz: 20 ms |
Beschleunigung der Spitzenleistung |
Ziel: 0,5 G Grenzwert: zwischen 0,25 G und 0,75 G |
Häufigkeit |
Ziel: 2/3 bis 1/3, dann zurück zu 1/2 der Resonanzfrequenz Alternative: 2/3 bis 1x, dann zurück zu 1/2 der Resonanzfrequenz |