¿Cómo obtener una vista desde las coordenadas de un evento en Android?

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

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

Bueno, para cualquiera que quiera saber lo que hice … no pude. Hice una solución para saber si se hizo clic en mi componente de vista específico, así que solo pude 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 solo funciona para vistas conocidas en el diseño que puede pasar como parámetro, todavía no puedo obtener la vista cliqueada simplemente conociendo las coordenadas. Sin embargo, puede buscar todas las vistas en el diseño.

Una forma simple de obtener la vista tocada es establecer un OnTouchListener para las vistas individuales y almacenar la vista en una variable de clase de la actividad. Si se devuelve falso, el evento de entrada estará disponible para el método onTouchEvent () de la actividad, donde podrá manejar fácilmente todos los eventos táctiles (también los de su vista principal).

 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); .... .... 

Solo 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()))); }