2012-07-27 6 views
32

Sto sviluppando un'applicazione per Android 2.2.2 per un cliente e vuole effettuare le seguenti operazioni:Come utilizzare View.OnTouchListener invece di onClick

Ora ho un pulsante con un evento onClick ma lui doesn' Mi piace, vuole vedere quando l'utente rilascia il pulsante.

Ho trovato View.OnTouchListener che penso sia questo che ho bisogno di usare ma, c'è qualche possibilità di aggiungere questo evento a xml come ho fatto con onClick?

<ImageButton 
    android:id="@+id/btnSaveNewGate" 
    android:layout_width="@dimen/btnSaveNewGate_width" 
    android:layout_height="@dimen/btnSaveNewGate_height" 
    android:layout_below="@+id/radioGrGateType" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="@dimen/btnSaveNewGate_marginTop" 
    android:background="@null" 
    android:contentDescription="@string/layout_empty" 
    android:onClick="onSaveNewGateClick" 
    android:scaleType="fitXY" 
    android:src="@drawable/save_gate_selector" /> 

Ho due domande più:

che è l'evento associato quando l'utente rilascia il dito?

Esistono linee guida che vietano l'utilizzo di View.OnTouchListener anziché onClick?

risposta

54

L'evento quando l'utente rilascia il dito è MotionEvent.ACTION_UP. Non sono a conoscenza dell'esistenza di linee guida che vietano l'uso di View.OnTouchListener anziché onClick(), molto probabilmente dipende dalla situazione.

Ecco un esempio di codice:

imageButton.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_UP){ 

      // Do what you want 
      return true; 
     } 
     return false; 
    } 
}); 
+4

In alternativa è possibile utilizzare un interruttore su event.getAction() e i casi sarebbero MotionEvent.ACTION_UP, MotionEvent.ACTION_DOWN e così via. –

+1

su uno più uno mostra MotionEvent.ACTION_DOWN invece di fare clic su – lionheart

+0

Nota che se restituisci false lì, la clausola if non verrà mai attivata. Vedi: https://stackoverflow.com/a/20359888/564628 –

5

OnClick viene attivato quando l'utente rilascia il pulsante. Ma se vuoi ancora usare TouchListener devi aggiungerlo nel codice. E 'solo:

myView.setOnTouchListener(new View.OnTouchListener() 
{ 
    // Implementation; 
}); 
6

Presumibilmente, se si vuole utilizzare un OnTouchListener piuttosto che un OnClickListener, quindi è necessaria la funzionalità extra del OnTouchListener. Questa è una risposta supplementare per mostrare più dettagli su come può essere usato un OnTouchListener.

Definire l'ascoltatore

Mettere questo da qualche parte nella vostra attività o un frammento.

private View.OnTouchListener handleTouch = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     int x = (int) event.getX(); 
     int y = (int) event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       Log.i("TAG", "touched down"); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       Log.i("TAG", "moving: (" + x + ", " + y + ")"); 
       break; 
      case MotionEvent.ACTION_UP: 
       Log.i("TAG", "touched up"); 
       break; 
     } 

     return true; 
    } 
}; 

Impostare l'ascoltatore

Impostare l'ascoltatore in onCreate (per un'attività) o onCreateView (per un frammento).

myView.setOnTouchListener(handleTouch); 

Note

  • getX e getY si forniscono le coordinate relative alla vista (cioè, l'angolo superiore sinistro della vista). Saranno negativi quando ci si sposta sopra o a sinistra della vista. Utilizzare getRawX e getRawY se si desidera che le coordinate dello schermo assoluto.
  • È possibile utilizzare i valori x e per determinare le cose come la direzione di scorrimento.
Problemi correlati