2012-06-13 21 views
13

que tienen una vista con una onTouch que puede distinguir entre la entrada táctil y clics izquierda/centro/derecha del ratón, como en¿Cómo puede mi vista responder a una rueda del mouse?

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (event.getButtonState() == MotionEvent.BUTTON_PRIMARY) // API 14 required 
    ... 
    ... 
} 

También me gustaría este punto de vista para responder a la rueda del ratón. onTouch no es el camino, ni he encontrado ningún otro controlador de eventos para responder a la rueda del mouse. ¿Tal vez la vista puede pretender ser desplazable y hacer lo suyo con los métodos de desplazamiento? En este punto, me he dado por vencido y estoy usando la entrada de teclado (1 a 9, más 0) para seleccionar los elementos que prefiero seleccionar con la rueda del mouse.
Así que una sugerencia firme o un poco de código sería apreciado.

No se preocupe, una interfaz de usuario de Android que requiera un teclado y un mouse se infligirá al público; la aplicación es una herramienta de desarrollo.

EDIT: la respuesta correcta se da a continuación, pero sólo por lo que esta cuestión es más útil para los futuros lectores, esto es (ligeramente editado) el código real que estoy usando como resultado:

@Override 
public boolean onGenericMotionEvent(MotionEvent event) { 
    if (0 != (event.getSource() & InputDevice.SOURCE_CLASS_POINTER)) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_SCROLL: 
     if (event.getAxisValue(MotionEvent.AXIS_VSCROLL) < 0.0f) 
      selectNext() 
     else 
      selectPrev(); 
     return true; 
    } 
    } 
    return super.onGenericMotionEvent(event); 
} 
+0

¿Quizás obtenga un evento clave, como pageup o algo así? GoogleTV tiene esos teclados, pero todos puedo encontrar conversaciones sobre d-pad, no la rueda de desplazamiento. –

+0

@jeffamaphone, 'Toast.makeText (this," ke: "+ KeyEvent.keyCodeToString (keyCode), Toast.LENGTH_SHORT) .show()' produce un buen resultado en el 'onKeyDown' de la actividad. Está en silencio cuando manipulo la rueda del mouse. –

+1

Bueno, vale la pena intentarlo. –

Respuesta

5

La respuesta aceptada fue un enlace al documento que me llevó al código de ejemplo en la pregunta, pero esa respuesta se eliminó. Para que esta pregunta ya no aparezca como 'sin respuesta', esta es la forma en que su vista puede responder a una rueda del mouse:

@Override 
public boolean onGenericMotionEvent(MotionEvent event) { 
    if (0 != (event.getSource() & InputDevice.SOURCE_CLASS_POINTER)) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_SCROLL: 
     if (event.getAxisValue(MotionEvent.AXIS_VSCROLL) < 0.0f) 
      selectNext(); 
     else 
      selectPrev(); 
     return true; 
    } 
    } 
    return super.onGenericMotionEvent(event); 
} 
0

La acción de evento de rueda del mouse se considera un evento de desplazamiento

Cuestiones relacionadas