我需要检测对下图中红点的触摸,因此在触摸点后我可以采取行动。我想我需要检测触摸坐标,并检查它是否与红点匹配。但是如何检测红点位置?是否可以?注意:如果有帮助,我可以选择图像格式,但可能我们需要使用位图。
我需要以编程方式获取点位置。我收到图片,我需要处理点上的触摸事件。但我可以收到不同点位置的不同图像
感谢所有的想法!
我需要检测对下图中红点的触摸,因此在触摸点后我可以采取行动。我想我需要检测触摸坐标,并检查它是否与红点匹配。但是如何检测红点位置?是否可以?注意:如果有帮助,我可以选择图像格式,但可能我们需要使用位图。
我需要以编程方式获取点位置。我收到图片,我需要处理点上的触摸事件。但我可以收到不同点位置的不同图像
感谢所有的想法!
我看到的最简单的解决方案是:
1- 获取 imageView 大小,因为它可能会根据设备屏幕大小和/或分辨率而改变。
int IVwidth = imageView.getWidth();
int IVHeight = imageView.getHeight();
2- 获取位图宽度/高度,然后找到位图宽度和 imageView 宽度之间的数学关系(比率),简单地说:
float HeightRatio = (float)bm.getHeight() / (float)iv.getHeight();
float WidthRatio = (float)bm.getWidth() / (float)iv.getWidth();
假设我们有一个 (800*600) 大小的位图和一个 (400*300) 大小的 imageView,这将为您提供 (2.0) 的高度和宽度比率。
3- 现在,当 ImageViewTouched 事件引发时,您可以很容易地获得触摸坐标,因为事件会将它们传递给您。请注意,捕捉触摸事件非常简单,只需将其添加到视图即可实现;
ImageView iv = (ImageView) findViewById(R.id.imageView1);
iv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if(arg1.getAction() == MotionEvent.ACTION_UP)
{
int x = arg1.getX();
int y = arg1.getY();
int XonImage = x * WidthRatio;
int YonImage = Y * HeightRatio;
if(bm.getPixel(XonImage, YonImage) == Color.RED)
{
// BINGOOOOOOO, do your magic here
}
}
return false;
}
});
如需更多信息,请毫不犹豫地询问。干杯
我会使用FrameLayout。视图层次结构应该是:
<FrameLayout>
<ImageView vineyard>
<LinearLayout dots_holder>
<ImageView dot1/>
<ImageView dot2/>
<ImageView dotn/>
</LinearLayout>
</FrameLayout>
您的点将覆盖在葡萄园图像上,您可以为每个点添加一个 OnClickListener。对于每个点 ImageView 的定位和尺寸,我会在您的代码中进行一些动态计算。
有这么多方法。您也许可以使用 SemperFly 的方法。还有用于视图的 onTouchListeners,它会给你坐标。您可能需要转换坐标以处理不同的屏幕密度。
您还可以将图像划分为网格,这可以简化或避免数学运算。另一种选择是将图像切成小块。你也可以使用类似RelativeLayout的东西。
您需要多精确的触摸检测?