Как получить представление из координат события в android?

Я хочу перехватить события касания на моем родительском представлении с помощью onInterceptTouchEvent (MotionEvent ev) .

Оттуда я хочу узнать, какой вид клика был нажат, чтобы делать другие вещи, есть ли способ узнать, какой вид клика был получен из полученного события движения?

Solutions Collecting From Web of "Как получить представление из координат события в android?"

Ну для тех, кто хочет знать, что я сделал … я не мог. Я сделал обходной путь, чтобы просто узнать, был ли нажат мой конкретный компонент вида, поэтому я мог только закончить это:

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

И метод:

 /** * 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; } } 

Однако это работает только для известных представлений в макете, которые вы можете передать как параметр, но я все еще не могу получить щелчок, просто зная координаты. Однако вы можете искать все виды в макете.

Простым способом получения затронутого представления является установка OnTouchListener для отдельных представлений и сохранение представления в переменной класса активности. Возврат false сделает входное событие доступным для метода onTouchEvent () для активности, где вы можете легко обрабатывать все события касания (также те, что представлены в родительском представлении).

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

Просто сделать метод хтафоя проще:

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