Dobrze dla każdego, kto chce wiedzieć, co zrobiłem ... nie mogłem. Zrobiłem obejście po prostu wiedzieć, czy mój specyficzny składnik pogląd został kliknięty, więc mogłem skończyć tylko z tym:
if(isPointInsideView(ev.getRawX(), ev.getRawY(), myViewComponent)){
doSomething()
}
i metoda:
/**
* 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;
}
}
Jednak to działa tylko dla znanych widoków w układ, który można przekazać jako parametr, nadal nie mogę uzyskać klikniętego widoku po prostu znając współrzędne. Możesz jednak wyszukać wszystkie widoki w układzie.
private boolean isPointInsideView (float x, float y, view) { \t \t Rect rect = new Rect(); \t \t view.getDrawingRect (rect); \t \t return rect.contains ((int) x, (int) y); \t} – etienne
Sugestia: świetny kandydat na metodę, która ma być statyczna. – m0skit0
@etienne, należy pamiętać, że getDrawingRect() zwraca informacje o rysunku rect pokazanym wewnątrz widoku przewijania. Nie działa, jeśli chcesz uzyskać widok, który jest zagnieżdżony w innym widoku. Rozwiązanie htafoya działa zgodnie z oczekiwaniami. – sulai