Después de muchos experimentos con onTouchEvent y onTouch, encontré que onTouch funciona en cualquier lugar que desee (ya sea en actividad o vista) ¡siempre y cuando haya declarado la interfaz y haya configurado el Listener! ¡Por otro lado, onTouchEvent solo funciona dentro de una Vista! ¿Mi suposición es correcta? ¿Es esta la verdadera diferencia?onTouchevent() vs onTouch()
Respuesta
Sí que son correctas - onTouch()
es utilizado por los usuarios del View
obtener los eventos táctiles mientras onTouchEvent()
es utilizado por las clases derivadas del View
obtener los eventos táctiles.
no está claro qué significan las clases derivadas aquí, si estoy en actividad solo trabajo en esta actividad – ERJAN
El onTouchEvent() en realidad se llamará a si ninguna de las vistas consume el evento táctil.
Y como usted dice, el onTouch() se puede utilizar en cualquier clase, siempre y cuando:
- Esa clase (es decir, Foo) implementa la interfaz OnTouchListener y
- Esa clase es un detector registrado utilizando
view.setOnTouchListener(foo);
he utilizado ontouch() y ontouchevent(), como ontouch se utiliza cuando quiero trabajar en los elementos de visión única, al igual que los botones, imagebuttons etc en un solo punto de vista (por ejemplo LinearLayout), mientras que cuando i quiero trabajar en áreas resto de la m y elementos (por ejemplo, botón) uso ontouchevent.
Tuve cierta confusión relacionada con cómo funciona elTouchEvent() 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 utilizar onTouch() que tiene que hacer tres cosas.
1- aplicar OnTouchListener
2- setOnTouchListener call() de la vista que desea establecer capturar el evento
3- anulación onTouch() para controlar el evento
pero si quieres para usar en TouchEvent() no necesita hacer el paso 1 & 2 arriba. solo debe sobrescribir On TouchEvent().
2) Trabajo:
onTouch() obras expuestas, ViewGroup, la actividad. 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 estas opciones forman parte de la filosofía de desarrollo más flexible de Android, aunque a veces crea confusión para los alumnos.
Al crear una vista personalizada, puede
@override onTouchEvent(MotionEvent e){}
mientras que se puede añadir a cualquier onTouch Ver, ViewGroup o actividad.
onTouch(View v, MotionEvent e) { //you can filter any View's touch }
onTouch es genérico y onTouchEvent es específico para ver. Y también puede filtrar su 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 viejas y no deberíamos usarlas.
Esto es en Android 5.1 API 22.
onTouchEvent es un método implementado por el Ver, Actividad y otras clases de base como LinearLayout, etc ..
public boolean onTouchEvent(MotionEvent event) {
throw new RuntimeException("Stub!");
}
puede anular este método por cualquiera de las clases derivadas
mientras que
onTouch() está definido por la interfaz OnTouchListener {}
public interface OnTouchListener { boolean onTouch(View var1, MotionEvent var2); }
lo que sólo necesita implementar uno al configurar esta interfaz para una clase
- 1. Multiple Views OnTouch Events
- 2. OnTouch funciona, pero OnClickListener no?
- 3. En onTouchEvent, ACTION_UP no funciona
- 4. onTouch, onLongHaga clic en Android
- 5. onTouchEvent se ejecuta dos veces
- 6. Android: nunca se llama a onTouch()?
- 7. Android onTouch con onClick y onLongClick
- 8. Anulación onTouchEvent que compite con ScrollView
- 9. por qué siempre recibo ACTION_DOWN desde onTouchEvent
- 10. onTouch dando puntos de contacto extraños Android
- 11. usando onTouch y onCreateContextMenu al mismo tiempo
- 12. Android: no puedo ver ACTION_MOVE/UP en onTouchEvent of a RelativeLayout
- 13. onTouchEvent se está ejecutando cuando se pasa la página utilizando ViewPager y PassByValue
- 14. evento onTouch que a veces no se activa ACTION_POINTER_DOWN
- 15. Registro si se presiona dentro de rectF en onTouchEvent
- 16. Android ¿Cómo registrar OnTouchEvent para toda la vista de contenido principal de la actividad?
- 17. Capturar evento onTouch por padre, manejarlo y pasarlo a los niños
- 18. Galería onItemClick y onTouchEvent no funcionan juntas desde la versión 3.0 de Android
- 19. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 20. TagSoup vs Jsoup vs HTML Analizador vs vs HotSax
- 21. 'método' vs. 'mensaje' vs. 'función' vs. '???'
- 22. ACE vs Boost vs Poco vs wxWidgets
- 23. VS 2008 vs VS 2008 Express
- 24. Atomikos vs JOTM vs Bitronix vs?
- 25. Acumular vs fold vs reducir vs compress
- 26. .NET vs ASP.NET vs CLR vs ASP
- 27. control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - FIABILIDAD
- 28. método vs función vs procedimiento vs clase?
- 29. Rhino simulacro vs Typemock vs JustMock vs
- 30. inline vs __inline vs __inline__ vs __forceinline?
@trojanfoe & stelios: Gracias chicos por la pregunta y la respuesta. Pero estoy un poco confundido. La razón es: "Tengo una actividad que implementa OnClickListener y el controlador de eventos onClick (View v). No he implementado en TouchListener. Pero tengo onTouchEvent (MotionEvent e) para manejar el evento swipe. El código funciona bien sin problemas. " Así que mi duda es cómo funciona onTouchEvent() aquí (en la actividad) ya que solo funciona en la vista. Además, no he implementado OnTouchLister o llamado a setOnTouchListener(), ¿qué hace que funcione? – Dexter
al devolver 'true' en onTouch() no se activará enTouchEvent. – Johnny