2012-10-03 76 views

回答

0

Touch監聽器適用於整個視圖而不是視圖的一部分..所以我建議您將圖像分成小塊,並在每個不透明的部分上添加觸摸監聽器。 我希望可以幫助您,以獲得更多的幫助,你也可以嘗試在這裏張貼的圖片,我們可以看到更好的,你想達到什麼..

+0

我也在旋轉一些動畫的圖像,所以我不能分割它。感謝您的回覆。 – zaferaltun

0

@ user1716538:你爲什麼不u使用PNG圖像? U可以使用png圖像去除圖像中不需要的部分,因此點擊事件不會發生在圖像的這些部分。

+0

嗨@vinod,你可以發佈示例代碼,包括這種方式的觸摸處理程序?我會着迷於嘗試它,因爲我以前沒有見過這種方法。 –

+0

如果有任何方法可以清楚地清除透明區域,它將非常有用。請與我們分享示例代碼。謝謝。 – zaferaltun

+2

下面是解我發現了什麼: 啓用繪圖緩存像iv.setDrawingCacheEnabled(真)ImageView的。然後獲取與觸摸偵聽器中的座標相匹配的位圖上的顏色。有效! BMP位= Bitmap.createBitmap(v.getDrawingCache()); int color = bmp.getPixel((int)event.getX(),(int)event.getY()); if(color == Color.TRANSPARENT)return false; – zaferaltun

1

由於@Cata說,觸摸事件將與整個圖像相關聯。然而,觸摸事件將告訴你在哪裏圖像中的觸摸是,所以可以編寫這樣的事情(忽略檢查正確的操作等):

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    boolean eventHandled = false; 

    int x = (int) (event.getX()); 
    int y = (int) (event.getY()); 
      if (imageIsOpaque(x,y) { 
       //Do the stuff 

       eventHandled = true; 
      } 

    return eventHandled; 
} 

這裏的關鍵是那麼imageIsOpaque,您將需要實現,在以下三種方式之一:

  1. 的圖像可以是容易段成不透明的和非不透明的區域在這種情況下:

    boolean imageIsOpaque(int touchX, int touchY) { 
        ArayList<Rect> rectsOfOpaqueness; // You will need to define these ... 
    
        boolean isOpaque = false; 
        for (int i=0; i<rectsOfOpaqueness.size() && !isOpaque; i++) { 
        if (rectsOfOpaqueness.get(i).contains(touchX, touchY)) { 
         isOpaque = true; 
         } 
    
        return isOpaque; 
    } 
    
  2. 圖像可能不容易處理,在這種情況下,您將需要使用x和y觸摸位置檢查源圖像(縮放到屏幕上的大小),以確定該點是否不透明。編輯:你似乎已經在下面的@vinod的評論中以相當整潔的方式使用了這個解決方案,所以我建議其他讀者也檢查一下這個評論。

  3. 甚至更​​複雜的,它可能是你contructing在飛行中的圖像,並永遠不會真正知道它在一個可搜索的方式最終狀態。如果是這種情況,您將需要建立一個單獨的二維布爾數組,當您創建圖像時確定哪些點是不透明的,哪些不是。

+0

這種方法看起來不錯,但我認爲它的表現會很糟糕。也很難處理像素。然而,謝謝你回答 – zaferaltun

+0

謝謝 - 我已經看過你對@vinod的評論,看起來像我的答案中的選項2的整齊實現,所以我已經提供了一個參考。 –

相關問題