从触摸事件获得真正的imageview坐标
问题描述:
如何将图像的真实坐标转换为从onTouch(View v, MotionEvent event
得到的坐标。基本上,我有imageview,我在其中绘制矩形,并且我想检查用户在这些矩形内部的触摸。 我有这样的东西:从触摸事件获得真正的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的坐标转换主题。
答
由于来自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 (x +resultView.getX() > rect.left && x +resultView.getX()< rect.right && y +resultView.getY()< rect.bottom &&
y +resultView.getY()> rect.top)
if语句