Cómo obtener una vista desde un evento de coordenadas en android?

Quiero interceptar los eventos táctiles en mi vista principal con onInterceptTouchEvent (MotionEvent ev) .

Desde allí quiero saber a qué vista se hizo clic para hacer otras cosas, ¿hay alguna manera de saber qué vista se hizo clic en ese evento de movimiento recibido?

3 Solutions collect form web for “Cómo obtener una vista desde un evento de coordenadas en android?”

Bueno para cualquiera que quiera saber lo que hice … no pude. Hice una solución para saber si mi componente de vista específica se ha hecho clic, por lo que sólo podría terminar con esto:

  if(isPointInsideView(ev.getRawX(), ev.getRawY(), myViewComponent)){ doSomething() } 

Y el método:

 /** * Determines if given points are inside view * @param x - x coordinate of point * @param y - y coordinate of point * @param view - view object to compare * @return true if the points are within view bounds, false otherwise */ public static boolean isPointInsideView(float x, float y, View view){ int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; //point is inside view bounds if(( x > viewX && x < (viewX + view.getWidth())) && ( y > viewY && y < (viewY + view.getHeight()))){ return true; } else { return false; } } 

Sin embargo, esto sólo funciona para las vistas conocidas en el diseño que puede pasar como parámetro, todavía no puedo obtener la vista de clic sólo por conocer las coordenadas. Sin embargo, puede buscar todas las vistas en el diseño.

Una forma sencilla de obtener la vista tocada es establecer un OnTouchListener en las vistas individuales y almacenar la vista en una variable de clase de la actividad. Devolver false hará que el evento de entrada esté disponible para el método onTouchEvent () de la actividad, donde puede manejar fácilmente todos los eventos táctiles (también los de su vista padre).

 myView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { touchedView = myView; return false; } }); @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if(touchedView!=null) { doStuffWithMyView(touchedView); .... .... 

Sólo para hacer el método de htafoya más simple:

 /** * Determines if given points are inside view * @param x - x coordinate of point * @param y - y coordinate of point * @param view - view object to compare * @return true if the points are within view bounds, false otherwise */ private boolean isPointInsideView(float x, float y, View view) { int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; // point is inside view bounds return ((x > viewX && x < (viewX + view.getWidth())) && (y > viewY && y < (viewY + view.getHeight()))); } 
  • ¿Qué el mensaje de logcat: "E / MoreInfoHPW_ViewGroup (2905): Vista de padre no es un TextView" significa?
  • Android: dibujar ImageView exactamente sobre la vista existente en una capa más profunda
  • Android: cómo encontrar varias vistas con un atributo común
  • ¿El índice es importante en addView ()?
  • Mejores prácticas de Android: vistas / actividades
  • Java.lang.InstantiationException: no se puede instanciar class: no hay constructor vacío
  • Android - ¿Cómo crear una vista de círculo con Android?
  • Android ToggleButton
  • es view.setOnTouchListener (listener) multicast? ¿como funciona?
  • Android: ¿es eficiente almacenar referencias a Views como variables miembro?
  • ¿Es posible detectar cuando cualquier aplicación está en pantalla completa en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.