OnTouchevent () vs onTouch ()

Después de muchos experimentos con onTouchEvent y onTouch, descubrí que onTouch funciona en cualquier lugar que quieras (ya sea en actividad o en vista) siempre y cuando hayas declarado la interfaz y puesto el Listener correcto! Por otro lado, onTouchEvent sólo funciona dentro de una vista! ¿Es correcta mi asunción? ¿Es esta la verdadera diferencia?

Sí, usted es correcto – 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 una cierta confusión relacionada con cómo onTouchEvent () y onTouch () trabajo (Usted 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 quieres usar onTouch () debes hacer tres cosas.

1- implementar OnTouchListener

2- llamar a setOnTouchListener () en la vista que desee configurar para capturar el evento

3- sobreescribir onTouch () para manejar el evento

Pero si quieres usar onTouchEvent () no necesitas hacer los pasos 1 y 2 anteriores. Sólo tienes que anular onTouchEvent ().

2) Trabajo:

OnTouch () funciona en view, viewgroup, activity. Lo que significa que puede utilizar onTouch () dentro de view, viewgroup o activity. Estos métodos toman dos argumentos [onTouch (View v, MotionEvent e)]. Esto le permite filtrar eventos para diferentes vistas en un grupo de actividades o vistas. O la actividad misma puede manejarlo. OnTouchEvent () toma un argumento [ onTouchEvent(MotionEvent e) ]. Por lo tanto, esto se puede utilizar sólo dentro de la vista que lo implementa o en la vista derivada. Una vista derivada permite la extensión del comportamiento táctil definido en onTouchEvent ().

Creo que estas opciones forman parte de la filosofía de desarrollo más flexible de Android, aunque a veces crea confusión para los estudiantes.

He utilizado ontouch () y ontouchevent (), como ontouch se utiliza cuando quiero trabajar en elementos de una sola vista, como botones, imagebuttons etc en una sola vista (por ejemplo Linearlayout), mientras que cuando quiero trabajar en áreas resto de la Mis elementos (p. Ej. Botón) utilizo ontouchevent.

El onTouchEvent () será llamado por la actividad si ninguna de las vistas consumen el evento táctil.

Y como usted dice, el onTouch () se puede utilizar en cualquier clase, siempre y cuando:

  1. Esa clase (es decir, Foo) implementa la interfaz OnTouchListener y
  2. Esa clase es un oyente registrado usando view.setOnTouchListener(foo);

Al crear una vista personalizada, puede

@override onTouchEvent(MotionEvent e){}

Mientras que usted puede agregar onTouch a cualquier View, ViewGroup o Activity.

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 puede filtrar su vista con 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.

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 reemplazar este método por cualquier clase derivada

mientras

OnTouch () es definido por la interfaz OnTouchListener {}

public interface OnTouchListener { boolean onTouch(View var1, MotionEvent var2); }

Por lo que sólo es necesario implementar una al establecer esta interfaz a una clase

  • Saltar ImageView mientras arrastra. Los valores de getX () y getY () saltan
  • GC y onTouch causan un error de señal fatal 11 (SIGSEGV) en la aplicación que utiliza ffmpeg a través de ndk
  • Hacer diferencias entre setOnClickListener y setOnTouchListener
  • Diseño con posición dinámica
  • Ocultar teclado en android mientras se toca fuera Editar área de texto
  • ¿Cómo manejar hacer clic en las vistas secundarias y tocar en los ViewGroups de los padres?
  • Ver sólo el registro de MotionEvent.ACTION_DOWN
  • Cómo combinar OnClickListener y OnTouchListener para un ImageButton
  • Gire la vista de disposición de androide sobre su centro usando el oyente táctil
  • Android dragvable ImageVIew
  • EditText en ListView pierde foco cuando se presiona en Android 4.x
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.