2012-08-02 21 views

risposta

66

È possibile utilizzare un onTouchListener:

view.setOnTouchListener(new View.OnTouchListener() {   
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       // PRESSED 
       return true; // if you want to handle the touch event 
      case MotionEvent.ACTION_UP: 
       // RELEASED 
       return true; // if you want to handle the touch event 
     } 
     return false; 
    } 
}); 
+4

L'evento 'MotionEvent.ACTION_CANCEL' deve anche essere gestito come evento di rilascio pulsante (allo stesso modo di 'ACTION_UP') quando viene attivato quando si esegue un gesto dopo aver premuto il pulsante (l'evento' ACTION_UP' non viene attivato in questo caso). – user2137020

+0

Se qualcuno si sta chiedendo, su una Vista normale, questi non corrispondono a "ACTION_BUTTON_PRESS" e "ACTION_BUTTON_RELEASE". Pensato che quei due potrebbero comprendere le azioni 'DOWN',' ​​UP' e 'CANCEL'. –

0

La risposta fornita da fiddler è corretta per le viste generiche.

Per un Button, si dovrebbe tornare false dal touch gestore sempre:

button.setOnTouchListener(new View.OnTouchListener() {  
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       // PRESSED 
       break; 
      case MotionEvent.ACTION_UP: 
      case MotionEvent.ACTION_CANCEL: 
       // RELEASED 
       break; 
     } 
     return false; 
    } 
}); 

Se si torna true si aggirare regolare elaborazione tocco del pulsante. Il che significa che perderai gli effetti visivi della pressione del pulsante e dell'increspatura del tocco. Inoltre, Button#isPressed() restituirà false mentre il pulsante viene effettivamente premuto.

L'elaborazione del tocco regolare del pulsante consente di ottenere gli eventi di follow-up anche quando si restituisce false.

Problemi correlati