2010-09-24 18 views
27

È possibile acquisire il rilascio di un pulsante mentre acquisiamo il clic utilizzando onClickListener() e OnClick()?Rilascio pulsante di acquisizione in Android

Desidero aumentare la dimensione di un pulsante quando viene premuto e riportarlo alla dimensione originale quando il clic viene rilasciato. Qualcuno può aiutarmi come fare questo?

risposta

47

È necessario impostare un OnTouchListener sul pulsante.

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      increaseSize(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      resetSize(); 
     } 
    } 
}; 
+0

OnTouchListener resta in ascolto solo per il tocco giusto? Voglio ascoltare per fare clic e rilasciare. Come andare a questo? – mdv

+1

Un evento di tocco su e giù è praticamente un clic. È anche possibile impostare sia un onclicklistener che un onuchlistener sul pulsante. –

+4

Mi chiedo solo perché Kiki abbia ottenuto la risposta accettata, poiché mi sento dare una risposta più precisa? –

1

Potrebbe essere possibile eseguire questa operazione ignorando onKeyDown e onKeyUp. Questi sono entrambi ereditati da android.widget.TextView. Si prega di consultare il android.widget.Button doc per (un po ') maggiori informazioni.

+1

onKeyDown e onKeyUp è per eventi di tastiera se non ho torto.È possibile catturare eventi di clic per loro? – mdv

2

utilizzare invece OnTouchListener o OnKeyListener.

0

Eric Nordvik ha la risposta giusta, tranne che

event.getAction() == MotionEvent.ACTION_UP 

mai avuto modo eseguito per me. Invece ho implementato

button.setOnClickListener(new OnClickListener() { 
     @Override 
     public boolean onClick(View v) { 
      resetSize();  
    } 
}; 

per il tocco ACTION_UP.

3

È necessario gestire anche MotionEvent.ACTION_CANCEL. Quindi il codice sarà:

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP || 
      event.getAction() == MotionEvent.ACTION_CANCEL) { 
      increaseSize(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      resetSize(); 
     } 
    } 
}; 
Problemi correlati