Intereting Posts
Центрирование текстового изображения Ниже кнопки изображения, которая находится под относительным расположением? EditText автоматически перейдет на новую строку Установить / Unistall из команды оболочки в Android Android python scripting: GUI? Вложенные настройки предпочтений в динамическом списке предпочтений на Android Поставщик контента INSTALL_FAILED_CONFLICTING_PROVIDER (установка поставщика контента как отдельного apk) Получить информацию о текущих видимых фрагментах в android dumpsys Пакетное удаление элементов с помощью Content Provider на Android Как обновить PreferenceActivity, чтобы показать изменения в настройках? Высота панели состояния? Android M + Retrofit + JSON: невозможно создать конструктор полей Как программно считывать маркер ImageView? ClassCastException: RestTemplate возвращает List <LinkedHashMap> вместо списка <MymodelClass> Пользовательская обработка SSL перестала работать на Android 2.2 FroYo Различные макеты для разных размеров экрана на Android?

Как получить представление из координат события в 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()))); }