检测图像上的色点触摸(位图)

时间:2012-10-25 18:34:26

标签: android android-layout

我需要检测下图像上的红点上的触摸,所以在现场触摸后我可以采取行动。 我想我需要检测触摸坐标,并检查它是否与红点匹配。但是如何检测红点位置?可能吗? 注意:如果有帮助,我可以选择图像格式,但我们可能需要使用位图。

我需要以编程方式获得点位置。我收到图片,我需要处理点上的触摸事件。但我可以收到不同点位置的不同图像

感谢您的所有想法!

enter image description here

3 个答案:

答案 0 :(得分:3)

我看到的最简单的解决方案是:

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;
        }
    });

如有任何信息,请毫不犹豫地询问。 干杯

答案 1 :(得分:1)

我会使用FrameLayout。视图层次结构应为:

<FrameLayout>
   <ImageView vineyard>
   <LinearLayout dots_holder>
      <ImageView dot1/>
      <ImageView dot2/>
      <ImageView dotn/>
   </LinearLayout>
</FrameLayout>

您的点将叠加在葡萄园图像上,您可以为每个点添加一个OnClickListener。对于每个点ImageView的定位和尺寸,我会在您的代码中进行一些动态计算。

答案 2 :(得分:0)

有很多方法。您可以使用SemperFly的方法。还有用于视图的onTouchListeners,它们可以为您提供坐标。您可能需要翻译坐标以处理不同的屏幕密度。

您也可以将图像划分为网格,这可以简化或避免数学运算。另一种选择是将图像切割成瓷砖。你也可以使用像RelativeLayout这样的东西。

您需要多准确的触摸检测?