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

时间:2017-09-10 07:23:01

标签: java android uiimageview imageview rect

如何将我的图像的真实坐标转换为我从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 个答案:

答案 0 :(得分:0)

由于来自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的坐标。< / p>

答案 1 :(得分:0)

我不确定我理解你的问题,但我认为你应该将图像视图坐标添加到if语句中,如下所示

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