studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android android-layout user-input

para - manual de programacion android pdf



Cómo usar View.OnTouchListener en lugar de onClick (3)

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 detectar cuando el usuario suelta el botón.

He encontrado View.OnTouchListener que creo que es lo que necesito usar, pero ¿hay alguna posibilidad de agregar este evento a xml como lo 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íba el uso de View.OnTouchListener lugar de onClick ?


El evento cuando el usuario suelta su dedo es MotionEvent.ACTION_UP . No sé si existen pautas que prohíban el uso de View.OnTouchListener en lugar de onClick (), lo más probable es que dependa de la situación.

Aquí hay un código de muestra:

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 suelta el botón. Pero si aún desea utilizar el TouchListener, debe agregarlo en el código. Es solo:

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


Presumiblemente, si uno quiere usar un OnTouchListener lugar de un OnClickListener , entonces se necesita la funcionalidad adicional del OnTouchListener . Esta es una respuesta complementaria para mostrar más detalles de cómo se puede usar un 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 oyente 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 o hacia la izquierda de su vista. Usa getRawX y getRawY si quieres las coordenadas de pantalla absolutas.
  • Puede usar los valores y para determinar cosas como la dirección del deslizamiento.