2012-12-16 20 views
2

我有一個圖像應該可以在某些區域進行點擊,比如圖像中的26個區域。 這樣做的最佳方式是什麼?如何計算ScrollView中ImageView的觸摸位置,考慮變焦係數?

enter image description here

我做了同樣大小的圖像,在圖像的每個點擊的區域有特定的顏色,白色背景,所以單擊圖像時,我可以在第二圖像的像素顏色位置並實現哪個區域被點擊。

問題是,我需要在ScrollView中顯示圖片,並調整圖像以適應屏幕寬度。我知道我可以使用event.getRawY() + sv.getScrollY();來計算點擊偏移量,但是如何計算縮放係數?

實際上,由於兩幅圖像尺寸相同,我需要計算考慮縮放因子的點擊位置,以找出第二個圖像中該像素的精確位置。

+0

您可以使用'event.getY()' - 方法來檢索視圖中的相對位置。 – DroidBender

+0

如何縮放係數?,原始圖像是352 * 700,但顯示的圖像被拉伸以適合屏幕寬度,我需要獲取觸摸位置,並將其縮放到352 * 700基準。 – Nevercom

+0

關於縮放因子..這只是一些數學計算正確的位置(x,y)取決於放大因子:) – DroidBender

回答

2

我認爲這可以幫助您。

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (v.getId() == R.id.imageView1 || v.getId() == R.id.image_scrollview) { 

     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      startX = (int) event.getX(); 
      startY = (int) event.getY(); 
      break; 
     case MotionEvent.ACTION_UP: 
      int cordinate_Y = (int) ((event.getY() + v.getScrollY())/diffH); 
      int cordinate_X = (int) ((event.getX() + v.getScrollX())/diffW); 
      if ((Math.abs((int) event.getX() - startX) > 10) 
        || (Math.abs((int) event.getY() - startY) > 10)) { 
       break; 
      } 

      int pixelColor = bitmap.getPixel(cordinate_X, cordinate_Y); 
      if (pixelColor != -1) { 
       showDetails(texts[map.get(pixelColor)], 
         images[map.get(pixelColor)], 
         titles[map.get(pixelColor)]); 

      } 

      break; 

     } 
    } 

    return false; 
} 
+1

謝謝,它實際上幫助。儘管如此,我早就想通了。 – Nevercom

0

在你的情況下,使用WebView代替它可能會更容易一些。您可以使用<map><area>來創建可點擊區域並將回傳發送到您的應用程序使用JavaScript

+0

任何評論怎麼做? – Nevercom

+0

您可以使用WebView和HTML來分享相同的示例代碼嗎? –