从触摸事件获得真正的imageview坐标

从触摸事件获得真正的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]; 

您现在可以使用xRelativeyRelative,而不是xy鉴于rects包含相对于您imageview坐标。

我不知道我理解你的问题,但我认为你应该添加图像视图坐标像下面

if (x +resultView.getX() > rect.left && x +resultView.getX()< rect.right && y +resultView.getY()< rect.bottom && 
      y +resultView.getY()> rect.top) 
if语句