2012-08-02 17 views

Respuesta

66

Se puede utilizar 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

El evento 'MotionEvent.ACTION_CANCEL' también debe tratarse como un evento de liberación de botón (de la misma manera que' ACTION_UP') que cuando se realiza un gesto después de presionar el botón (el evento 'ACTION_UP' no se activa en este caso). – user2137020

+0

Si alguien se pregunta, en una vista normal, estos no corresponden a 'ACTION_BUTTON_PRESS' y' ACTION_BUTTON_RELEASE'. Pensé que esos dos podrían abarcar las acciones 'DOWN',' ​​UP' y 'CANCEL'. –

0

La respuesta dada por fiddler es correcta para vistas genéricas.

Para una Button, debe devolver false desde el controlador táctil siempre:

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; 
    } 
}); 

Si regresa true va a eludir el procesamiento contacto regular del botón. Lo que significa que perderá los efectos visuales de presionar el botón hacia abajo y la ondulación táctil. Además, Button#isPressed() devolverá false mientras se presiona el botón.

El procesamiento táctil regular del botón le asegurará que obtendrá los eventos de seguimiento incluso al devolver false.

Cuestiones relacionadas