Получить реальные изображения с помощью сенсорного события
Как преобразовать мои реальные координаты изображения в координаты, которые я получил от 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 )