2012-10-25 89 views
1

我需要检测图像波纹管上红色斑点的触摸,因此触摸斑点后,我可以进行操作。 我想我需要检测触摸坐标,并检查它是否与红点匹配。但是,我如何检测红点位置?可能吗? 注:如果有帮助,我可以选择图像格式,但可能需要使用位图。检测图像上彩色斑点的触摸(位图)

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

感谢您的所有想法!

enter image description here

回答

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

欲了解更多信息,请不要犹豫。 干杯

+0

不错......什么是“bm”? – Si8

+1

bm是ImageView的位图 – janex

1

我会用一个FrameLayout。视图层次应是:

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

你点会在葡萄园图像上被覆盖,你可以添加一个OnClickListener各去一次。对于每个点ImageView的定位和尺寸,我会在代码中进行一些动态计算。

+0

问题在于图像带有红点。我需要检测这个点上的触摸,然后我可以在弹出窗口中显示一些信息。 – vandzi

+0

只需在每个点上放置一个空视图。上述同样的原则适用。 – SemperFly

+0

但是如何检测点的位置?我有点形象,但我不知道他们的立场。我需要从图片中找出它 – vandzi

0

有很多方法。您可能可以使用SemperFly的方法。也有onTouchListeners的意见,这将给你的坐标。您可能需要翻译坐标以处理不同的屏幕密度。

你也许能够将图像分成网格,这可能会简化或避免数学。另一种选择是将图像切成瓦片。你也可以使用像RelativeLayout这样的东西。

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

+0

问题在于图像带有红点。我需要检测这个点上的触摸,然后我可以在弹出窗口中显示一些信息。 – vandzi