2010-05-13 4 views
7

Wenn Sie möchten, dass eine Schaltfläche haptische Rückmeldung (dh das Telefon vibriert sehr kurz, so dass Sie das Gefühl haben, dass Sie wirklich den Knopf gedrückt haben), wie üblich ist das zu tun? Es scheint, dass Sie entweder explizit ein onClick() -Ereignis setzen und die Funktion vibrate() aufrufen können, indem Sie eine Anzahl von Millisekunden angeben, um zu vibrieren, oder Sie können hapticFeedbackEnabled in der Ansicht festlegen.Android: Haptisches Feedback: onClick() Ereignis vs hapticFeedbackEnabled in der Ansicht

Die Dokumentation scheint darauf hinzudeuten, dass diese funktioniert nur für lange Pressen oder virtuelle On-Screen-Tasten: http://developer.android.com/reference/android/view/View.html#performHapticFeedback(int)

Wenn das stimmt, dann muss ich entweder meine Taste eine virtuelle On-Screen-Taste oder manuell vornehmen Setzen Sie das Ereignis onClick().

Was empfehlen Sie?

Wenn ich möchte, dass das Vibrieren sofort passiert, wenn der Finger des Benutzers den Knopf berührt, im Gegensatz dazu, wenn der Finger den Knopf "loslässt", was ist der beste Weg, dies zu erreichen?

Verwandte Frage: How to enable haptic feedback on button view

Antwort

0

Ich denke, dass Vibrieren() aufrufen manuell keine gute Idee ist. Es würde bedeuten, dass jemand, der keine haptische Rückmeldung wünscht, sein Handy vibrieren lassen wird. Außerdem weiß ich nicht, wie es auf nicht vibrierende Produkte reagiert. setHapticFeedbackEnabled ist definitiv der gute Weg, es zu tun; Die Methode wurde für diese sehr spezifische Purpose erstellt.

+0

Danke Moons. Schau dir meinen Kommentar zu Edwards Antwort an. – dreeves

+0

Die Verwendung von setHapticFeedbackEnabled (true) macht absolut nichts. Es gibt keine Garantie, dass Ihr Gerät haptisches Feedback verwendet. –

3

Ich benutze vibrate() in meiner Taschenrechner-App, aber das war nur, weil das System keine haptischen Feedback-Optionen hatte, als ich es schrieb. Ich empfehle diesen Ansatz aus mehreren Gründen nicht. Insbesondere hat jedes Telefon verschiedene Eigenschaften (Masse, Vibrationsmotor, Motorposition usw.), so dass sich das, was sich an einem Telefon anfühlt, nicht auf einem anderen befindet.

Es ist jedoch davon auszugehen, dass die einzelnen Telefonhersteller zumindest ein wenig "tuning" bei ihren jeweiligen Produkten gemacht haben, so dass das eingebaute haptische Feedback eine bessere Chance hat, sich auf der ganzen Linie zu fühlen.

Wenn Sie, wie oben bereits erwähnt, Ihr eigenes haptisches Feedback implementieren, müssen Sie Ihre eigenen Einstellungen in Ihren Einstellungen implementieren. Es ist viel besser, wenn der Benutzer es systemweit einrichten kann.

Wenn es die Zeit erlaubt (hah!), Werde ich von der Verwendung von vibrate() auf die Verwendung der systemeigenen haptischen Rückmeldung umstellen.

+0

Danke Edward. Ich bin mir immer noch nicht sicher, wie das eigentlich gemacht wird. Zum Beispiel, wie machen Sie Ihre Tasten zu "virtuellen Bildschirmtasten" und bin ich mir sicher, dass dies die einzige Möglichkeit ist, haptisches Feedback auf normale (nicht lange drücken) Tastendrücke zu bekommen? – dreeves

+2

Wenn ich meinen Quellcode betrachte, sehe ich, dass ich nichts Cleveres getan habe. Alle meine Tasten rufen die gleiche Funktion auf, die mit beginnt, wenn (keyclick &&vibrator! = Null) vibrator.vibrate (KEYCLICK_TIME); Wo "Vibrator" von erhalten wurde Vibrator = (Vibrator) getSystemService (Context.VIBRATOR_SERVICE); Ahhh, ich sehe, was Sie bekommen. Sie möchten, dass dies für Button-Widgets funktioniert und die Dokumentation bedeutet, dass es nur für virtuelle Tastaturen gilt. Tut mir leid, habe damit nicht experimentiert. –

1

Meine einzige Lösung bisher war es, einen Anruf auf performHapticFeedback in den OnClickListener-Tasten zu setzen. Das funktioniert, aber es scheint ein bisschen wie ein Hack zu sein.

4

Es gibt eine längere Beschreibung im Android Cookbook - Chapter Haptic Feedback

Zusammenfassung: Es gibt mehrere Schritt benötigt:

  • Schwingungs ermöglichen in manifest
  • haptisches Feedback ermöglichen für den Knopf/view
  • Register ein onTouch Listener für Ihre Taste
  • Anruf performHapticFeedback() auf Touch down

Sie sowohl eine onTouchLister für die haptische Rückmeldung und eine onClickHandler für Ihre Aktion haben kann, nur sicherstellen, dass die die onTouchHandler false zurückgibt, sonst das Ereignis als verbraucht markiert ist und nicht auf die onClickHandler gegeben.