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.
- 3 Puntos después de un texto que no encaja en el tamaño de vista de texto
- Android Drawer Layout está mostrando contenido de fragmentos
- Android scrollview quitar la luz azul
- La visibilidad de la barra de progreso de carga de fragmentos dinámicos de Android no se establecerá
- ¿Son la etiqueta y el icono mutuamente excluyentes en un tabHost TabSpec setIndicator?
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
?
- Cómo añadir una barra de acción a la plantilla de actividad de Google Maps predeterminada en Android Studio
- Android - acercar / alejar RelativeLayout con spread / pinch
- El color del elemento de menú NavigationView no cambia en API 15
- ¿Cómo puedo dibujar un círculo a través de XML Drawable - Android?
- Cómo guardar la imagen en la tarjeta SD en el botón Haga clic en android
- ¿Cómo eliminar a EditText drawable padding?
- Mostrar AlertDialog en cualquier posición de la pantalla
- Cómo deshabilitar / habilitar a todos los niños en LinearLayout en Android
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
ygetY
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. UsegetRawX
ygetRawY
si desea las coordenadas absolutas de pantalla. - Puede usar los valores de
x
ey
para determinar cosas como la dirección de desplazamiento.