2012-06-13 8 views
13

Ho una visione con una onTouch in grado di distinguere tra l'input tocco e clic sinistro/centrale/destro del mouse, come inCome può la mia vista rispondere a una rotellina del mouse?

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

Mi piacerebbe anche meglio di questa vista di rispondere alla rotella del mouse. onTouch non è il modo, né ho trovato nessun altro gestore di eventi per rispondere alla rotellina del mouse. Forse la vista può fingere di essere scorrevole e fare le proprie cose con i metodi di scorrimento? A questo punto, mi sono arreso e sto usando l'input da tastiera (da 1 a 9, più 0) per selezionare gli elementi visualizzati che preferirei selezionare con la rotellina del mouse.
Sarebbe gradito un suggerimento o un po 'di codice.

Non preoccuparti che un'interfaccia utente Android che richiede una tastiera e un mouse venga applicata al pubblico; l'app è uno strumento di sviluppo.

EDIT: la risposta corretta è riportata qui sotto, ma solo così questa domanda è più utile per futuri lettori, questo è (leggermente modificato) il codice che sto usando come risultato:

@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

Ti forse ottenere un evento chiave, come PageUp o qualcosa del genere? GoogleTV ha quelle tastiere, ma tutto quello che posso trovare parla di d-pad, non di scroll wheel. –

+0

@jeffamaphone, 'Toast.makeText (questo," ke: "+ KeyEvent.keyCodeToString (keyCode), Toast.LENGTH_SHORT) .show()' produce un buon output nel 'onKeyDown' dell'attività. È silenzioso quando manipolo la rotellina del mouse. –

+1

Bene, vale la pena sparare. –

risposta

5

La risposta accettata era un collegamento del documento che mi ha portato al codice di esempio nella domanda, ma quella risposta è stata cancellata. In modo che questa domanda non appare più 'senza risposta', questo è come la visualizzazione può rispondere a una rotella 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

L'azione evento rotellina del mouse è considerata un evento di scorrimento