Android - 在ImageView上创建可点击区域

4
我想在ImageView上创建一个可点击区域,使用这个数据。
"X1": "213",
"Y1": "174",
"X2": "339",
"Y2": "269",

我想在可点击区域上关联一个操作,例如在点击时进入某个Activity。 我不想使用此链接中提供的解决方案: clickable area of image 因为我有多个ImageView,每次坐标可能会不同。这些坐标来自服务器。 请建议最佳处理此问题的方法。

您可以使用提供的坐标创建RectF对象,并为ImageView设置onTouchListner,然后将您的RectF与单击区域进行比较。 - USKMobility
您可以尝试使用矩形(Rect()),为整个布局添加onTouchListener(),并检查事件坐标是否在矩形内。还有一个名为AbsoluteLayout的布局,您可以在其中指定精确位置,但我不建议使用它,因为它不支持不同大小的屏幕。 - yennsarah
矩形(Rect())会根据屏幕大小来缩放给定的坐标吗?因为我的ImageView宽度是match_parent,高度是wrap_content。 - Hamza Mehmood
因为服务器为一张宽度为640像素,高度为380像素的图片提供了这些坐标。 - Hamza Mehmood
1个回答

7
您可以查看触摸位置:
ImageView iv = (ImageView) findViewById(R.id.image);
iv.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    log.d(TAG,"Location: " + event.getX() + " , " + event.getY());
    }
});

更新1:您可以按照以下方式获取视图的左上角位置:

int[] viewCoords = new int[2];
imageView.getLocationOnScreen(viewCoords);

从那里,您可以看到被触摸的图像视图的确切位置:

int X = (int) event.getX();
int Y = (int) event.getY();

int imageX = X - viewCoords[0];
int imageY = Y - viewCoords[1];

我猜首先需要将我的图像缩放到新的屏幕尺寸,然后也要为新的屏幕宽度缩放我的坐标,只有这样才能使用这个监听器。我说得对吗,先生? - Hamza Mehmood
让我试一下这个解决方案,然后再回复你。 - Hamza Mehmood
谢谢伙计。我已经将imageX和ImageY从PX转换为Dp,现在我认为我几乎接近我的解决方案了。再次感谢你。 - Hamza Mehmood
太好了。我很高兴听到这个消息。 - Mohammad Zarei
@HamzaMehmood 如果你能发布你实现的完整解决方案,那将是非常棒的。 - Mehul Joisar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接