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()))); } 
  • ¿Cómo puedo implementar esta vista en Android?
  • Android view.getId () devuelve -1
  • Llamar findViewById () desde fuera de una actividad
  • ¿En qué momento del ciclo de vida de la aplicación puede / debe utilizar mediciones de diseño?
  • Cómo agregar una vista a la parte superior de un diseño lineal en el código?
  • Android: ViewPager y HorizontalScrollVIew
  • Android.view.InflateException: Línea de archivo XML binario # 33: Error al inflar la clase
  • Android View PerformClick () y callOnClick () diferencia
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.