2012-10-25 88 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