Cómo utilizar View.OnTouchListener en lugar de onClick

Estoy desarrollando una aplicación Android 2.2.2 para un cliente y él quiere hacer lo siguiente:

Ahora tengo un botón con un evento onClick pero no le gusta, quiere dectectar cuando el usuario suelte el botón.

He encontrado View.OnTouchListener que creo que esto es lo que necesito usar pero, ¿hay alguna posibilidad de agregar este evento a xml como hice 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" /> 

Tengo dos preguntas más:

¿Cuál es el evento asociado cuando el usuario suelta su dedo?

¿Hay alguna guía que prohíbe usar View.OnTouchListener lugar de onClick ?

    3 Solutions collect form web for “Cómo utilizar View.OnTouchListener en lugar de onClick”

    El evento cuando el usuario suelta su dedo es MotionEvent.ACTION_UP . No estoy enterado si hay algunas pautas que prohíban usar View.OnTouchListener en vez de onClick (), lo más probablemente depende de la situación.

    He aquí un ejemplo de código:

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

    OnClick se activa cuando el usuario libera el botón. Pero si todavía quieres usar el TouchListener necesitas agregarlo en código. Es sólo:

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

    Presumiblemente, si se quiere usar un OnTouchListener lugar de OnClickListener , entonces se necesita la funcionalidad adicional del OnTouchListener . Esta es una respuesta suplementaria para mostrar más detalles sobre cómo se puede utilizar OnTouchListener .

    Definir el oyente

    Pon esto en alguna parte de tu actividad o fragmento.

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

    Establecer el oyente

    Establezca el listener en onCreate (para una actividad) o onCreateView (para un fragmento).

     myView.setOnTouchListener(handleTouch); 

    Notas

    • getX y getY dan las coordenadas relativas a la vista (es decir, la esquina superior izquierda de la vista). Serán negativos cuando se mueva arriba oa la izquierda de su vista. Use getRawX y getRawY si desea las coordenadas absolutas de pantalla.
    • Puede usar los valores de x e y para determinar cosas como la dirección de desplazamiento.
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.