2010-05-13 17 views
7

Si desea que un botón proporcione retroalimentación háptica (es decir, el teléfono vibra muy brevemente para que sienta que realmente presionó el botón), ¿cuál es la forma estándar? ¿Para hacer eso? Parece que puede establecer explícitamente un evento onClick() y llamar a la función vibrate(), dando un número de milisegundos para que vibre, o puede establecer hapticFeedbackEnabled en la vista.Android: Haptic feedback: evento onClick() vs hapticFebackbackEnabled en la vista

La documentación parece indicar que este último sólo funciona durante largos prensas o virtuales teclas en pantalla: http://developer.android.com/reference/android/view/View.html#performHapticFeedback(int)

Si eso es correcto, entonces necesito ya sea que mi botón de una tecla virtual en pantalla o manualmente establecer el evento onClick().

¿Qué me recomiendas?

Además, si quiero que la vibración se produzca inmediatamente cuando el dedo del usuario toca el botón, en lugar de cuando el dedo "suelta" el botón, ¿cuál es la mejor manera de lograrlo?

pregunta relacionada: How to enable haptic feedback on button view

Respuesta

0

creo que llamar a vibrar() no es una buena idea manualmente. Significaría que alguien que no desea retroalimentación háptica tendrá su teléfono vibrando. Además, no sé cómo reacciona en productos que no vibran. setHapticFeedbackEnabled es definitivamente la mejor manera de hacerlo; el método fue creado para este purpopse muy específico.

+0

Gracias Luna. Mira mi comentario sobre la respuesta de Edward. – dreeves

+0

El uso de setHapticFeedbackEnabled (true) no hace absolutamente nada. No hay garantía de que hará que su dispositivo use comentarios hápticos. –

3

Uso vibrate() en mi aplicación de calculadora, pero eso fue solo porque el sistema no tenía opciones de retroalimentación táctil cuando lo escribí. No recomiendo ese enfoque por varias razones. En particular, cada teléfono tiene diferentes características (masa, motor vibrador, posición del motor, etc.) así que lo que "siente" bien en un teléfono no estará bien en otro.

Sin embargo, es justo suponer que los fabricantes de teléfonos individuales han hecho al menos un poco de "ajuste" en sus productos particulares, por lo que la retroalimentación táctil incorporada tiene una mayor probabilidad de sentirse en todos los ámbitos.

Además, como se señaló anteriormente, si implementa sus propios comentarios hápticos, tendrá que implementar su propia configuración en sus preferencias. Es mucho mejor dejar que el usuario lo configure en todo el sistema.

Si el tiempo lo permite (hah!) Planeo cambiar de usar vibrate() a usar el sistema de retroalimentación táctil háptica.

+0

Gracias Edward. Todavía no tengo claro cómo se hace esto en realidad. Por ejemplo, ¿cómo hace que sus botones sean "teclas virtuales en pantalla" y estoy en lo correcto al decir que esa es la única forma de obtener retroalimentación háptica en prensas de botón normales (sin presionar demasiado)? – dreeves

+2

Al mirar mi código fuente, veo que no hice nada inteligente. Todos mis botones devuelven la misma función, que comienza con if (keyclick && vibrator! = Null) vibrator.vibrate (KEYCLICK_TIME); Donde se obtuvo "vibrador" de vibrador = (Vibrador) getSystemService (Context.VIBRATOR_SERVICE); Ahhh, veo a lo que te refieres. Desea que esto funcione para los widgets de botones y la documentación implica que es solo para teclados virtuales. Lo siento, no he experimentado con eso. –

1

Mi única solución hasta ahora ha sido llamar al performHapticFeedback en los botones OnClickListener. Esto funciona, pero parece un poco complicado.

4

Hay una descripción más larga en el Android Cookbook - Chapter Haptic Feedback

Resumen: hay varios pasos necesarios:

  • activar la vibración en el manifiesto
  • permitir la retroalimentación háptica para el botón/vista
  • registrar una OnTouch Listener para su botón
  • llamada performHapticFeedback() en Touch down

Puede tener tanto un onTouchLister para la retroalimentación háptica y una onClickHandler para su acción, basta con que la del onTouchHandler devuelve falso, de lo contrario el evento está marcado como consumido y no se le da a la onClickHandler.

Cuestiones relacionadas