Получить реальные изображения с помощью сенсорного события

Как преобразовать мои реальные координаты изображения в координаты, которые я получил от onTouch(View v, MotionEvent eventВ основном у меня есть imageview, в котором я рисую прямоугольники, и я хочу проверить, что пользователь касался этих прямоугольников. у меня есть что-то вроде этого:

private ArrayList rects = new ArrayList<> ();

resultView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){
            int x = (int) event.getX();
            int y = (int) event.getY();

            for (Rect rect : rects) {
                if (x > rect.left && x < rect.right && y > rect.bottom && 
                y < rect.top) {
                      // the user toches on of these rectangle
                }
             }
        }
        return true;
    }
    });

но настоящая проблема в том, что мой rects реальные координаты изображения, которые намного больше, и x , y координаты imageview.how для конвертации темы.

2 ответа

Поскольку координаты исходят из TouchEvent абсолютные координаты, вы можете вычесть абсолютные координаты вашего ImageView от них. Это сделает ваш (x,y) координаты относительно ImageView, Вы можете сделать это как -

int arr[] = new int[2];
imageView.getLocationOnScreen(arr);
float xRelative = event.getRawX() - arr[0];
float yRelative = event.getRawY() - arr[1];

Теперь вы можете использовать xRelative а также yRelative вместо x а также y При условии rects содержат координаты относительно вашего imageview,

Я не уверен, что понимаю вашу проблему, но я думаю, что вы должны добавить координаты представления изображения в оператор if, как показано ниже

 if (x +resultView.getX() > rect.left && x +resultView.getX()< rect.right  && y +resultView.getY()< rect.bottom && 
            y +resultView.getY()> rect.top ) 
Другие вопросы по тегам