android - ejemplo - onTouchevent() versus onTouch()
ontouchlistener android ejemplo (7)
Después de muchos experimentos con onTouchEvent y onTouch, encontré que onTouch funciona en cualquier lugar que desee (ya sea en actividad o en vista) siempre y cuando haya declarado la interfaz y puesto al Listener en la posición correcta. ¡Por otro lado, onTouchEvent solo funciona dentro de una Vista! ¿Mi suposición es correcta? ¿Es esta la verdadera diferencia?
Al crear una vista personalizada, puede
@override onTouchEvent(MotionEvent e){}
mientras que puede agregar Toque a cualquier Vista, Grupo de visualización o Actividad.
onTouch(View v, MotionEvent e) { //you can filter any View''s touch }
onTouch es genérico y onTouchEvent es específico de View. Y también puedes filtrar tu vista usando onTouch.
Encontré otra diferencia. onTouchEvent no parece obtener los eventos obsoletos MotionEvent.ACTION_POINTER_2_DOWN y MotionEvent.ACTION_POINTER_2_UP.
Por supuesto, son bastante viejos y no deberíamos usarlos.
Esto está en Android 5.1 api 22.
He usado ontouch () y ontouchevent (), ya que ontouch se usa cuando quiero trabajar en elementos de vista única, como botones, botones de imagen, etc. en vista única (por ejemplo Linearlayout), mientras que cuando quiero trabajar en áreas restantes del mis elementos (por ejemplo, botón) uso ontouchevent.
OnTouchEvent () realmente será llamado por la actividad si ninguna de las vistas consume el evento táctil.
Y como dices, el onTouch () se puede usar en cualquier clase, siempre que:
- Esa clase (es decir, Foo) implementa la interfaz OnTouchListener y
- Esa clase es un oyente registrado que usa
view.setOnTouchListener(foo);
Sí, tiene razón: onTouch()
es utilizado por los usuarios de la View
para obtener eventos táctiles, mientras que onTouchEvent()
es utilizado por las clases derivadas de la View
para obtener eventos táctiles.
Tuve cierta confusión relacionada con el funcionamiento deTouchEvent () y onTouch () (Puede ver mi comentario a esta pregunta). Después de algunas investigaciones a continuación, es lo que he encontrado en él. Esto puede ser útil para principiantes.
1) Implementación:
Si desea usar onTouch (), debe hacer tres cosas.
1- implementar OnTouchListener
2- Llamar a setOnTouchListener () en la vista que desea configurar atrapar el evento
3- anular onTouch () para manejar el evento
pero si desea utilizar onTouchEvent () no necesita hacer los pasos 1 y 2 anteriores. solo debe sobrescribir On TouchEvent ().
2) trabajando:
onTouch () funciona en view, viewgroup, activity. Lo que significa que puede usar onTouch () dentro de view, group o activity. Este método toma dos argumentos [onTouch (View v, MotionEvent e)]. Esto le permite filtrar eventos para diferentes vistas en una actividad o grupo de visualización. O la actividad puede en sí misma manejarlo. onTouchEvent () toma un argumento [ onTouchEvent(MotionEvent e)
]. Por lo tanto, esto se puede usar solo dentro de la vista que lo implementa o en la vista derivada. Una vista derivada habilita la extensión del comportamiento táctil definido en onTouchEvent ().
Creo que esas opciones son parte de la filosofía de desarrollo más flexible de Android, aunque a veces crea confusión para los alumnos.
onTouchEvent es un método implementado por View , Activity y otras clases base como LinearLayout , etc.
public boolean onTouchEvent(MotionEvent event) {
throw new RuntimeException("Stub!");
}
puede anular este método por cualquier clase derivada
mientras
onTouch () está definido por la interfaz OnTouchListener {}
public interface OnTouchListener { boolean onTouch(View var1, MotionEvent var2); }
así que solo necesita implementar uno cuando configure esta interfaz para una clase