Bueno para cualquiera que quiera saber lo que hice ... no pude. Hice una solución para saber exactamente si se hizo clic en mi componente de vista específico, por lo que sólo podí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 puntos de vista por la 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.
privada isPointInsideView booleano (float x, float y, vista) { \t \t Rect Rect rect = new(); \t \t view.getDrawingRect (rect); \t \t return rect.contains ((int) x, (int) y); \t} – etienne
Sugerencia: gran candidato de método para hacerse estático. – m0skit0
@etienne, tenga en cuenta que getDrawingRect() devuelve información sobre el trazado de dibujo que se muestra dentro de una vista de desplazamiento. No funciona si desea obtener la rect de una vista anidada en otra vista. La solución de htafoya funciona como se esperaba. – sulai