@katavagner

Как определить элемент по координатам?

При помощи функции onTouch определяю элемент на который было нажатие пальцем (курсором в эмуляторе), далее делается какой-то жест и палец (курсор в эмуляторе) отпускается над каким-то элементом.

То есть имеются координаты элемента, на котором отпустили палец, проблема в том, что я не знаю как получить его id или получить к нему доступ.

public boolean onTouch(View v, MotionEvent event) {
        x = event.getX();
        y = event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: // нажатие
                topY = button1.getTop();
                leftX = button1.getLeft();
                rightX = button1.getRight();
                bottomY = button1.getBottom();

                topY2 = v.getTop();
                leftX2 = v.getLeft();
                rightX2 = v.getRight();
                bottomY2 = v.getBottom();

                tv_elem.setText(
                        topY + "\n" + leftX + "\n" + rightX + "\n" + bottomY  + "\n"  + "\n" +
                        topY2 + "\n" + leftX2 + "\n" + rightX2 + "\n" + bottomY2
                );
                break;
            case MotionEvent.ACTION_MOVE: // движение
                eX = (int) event.getX();
                eY = (int) event.getY();
                int x = (int) event.getX() - offset_x;
                int y = (int) event.getY() - offset_y;
                int w = getWindowManager().getDefaultDisplay().getWidth() - 50;
                int h = getWindowManager().getDefaultDisplay().getHeight() - 10;
                if (x > w) x = w;
                if (y > h) y = h;

                tv_elem.setText(
                        (eX + leftX2) + " " + leftX + " " + rightX + "\n" +
                        (eY + topY2) + " " + topY + " " + bottomY + "\n"
                );

                if ((eX + leftX2) > leftX && (eX + leftX2) < rightX && (eY + topY2) > topY && (eY + topY2) < bottomY) {
                    button1.setBackgroundColor(Color.RED);
                } else {
                    button1.setBackgroundColor(Color.BLUE);
                }

                break;
            case MotionEvent.ACTION_UP: // отпускание
            case MotionEvent.ACTION_CANCEL:
                /* здесь что-то, чтобы проверить над каким элементом отпустили */
                tv_elem.setText("Все, отпустил");
                break;
        }
        return true;
    }
  • Вопрос задан
  • 582 просмотра
Пригласить эксперта
Ответы на вопрос 2
gadfi
@gadfi
https://gamega.org
у вас же есть параметр View
v.getId();
Ответ написан
Комментировать
@belozerow
Наверное только пробегаться по всем возможным вьюхам и смотреть у getGlobalVisibleRect через contains.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы