2012-09-21 82 views
2

我有一些不規則形狀的按鈕,創建爲ImageButtons。 ImageButtons的「android:src」屬性是透明背景的.PNG文件。並且這些ImageButton的父級佈局具有一個自定義的背景圖片,它是用「android:background」屬性定義的。所以活動的背景不透明或者只是黑色。Android - 如何檢測自定義形狀按鈕點擊區域的透明度

我的問題是;如何檢測按鈕上的點擊是在源圖像的透明區域上還是在源圖像的可見部分上?

我嘗試使用onTouchListener獲取事件的座標並根據像素的顏色做出決定;但由於背景豐富多彩,我無法理解。

任何幫助,非常感謝。提前致謝!

回答

0

嗨,兄弟,我認爲這個鏈接可能會幫助你。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/view/View.java#View.dispatchTouchEvent%28android.view.MotionEvent%29

您需要在您的自定義按鈕來重寫此方法來返回false,如果點不在所需的區域。我建議你這樣做:

public static class MyButton extends ImageButton { 
    @Override 
    public boolean dispatchTouchEvent(MotionEvent event) { 
     int iX = (int) event.getX(); 
     int iY = (int) event.getY(); 

     // TODO Or use a more sophisticated, pixel value-based condition 
     if (!(iX >= 0 & iY >= 0 & iX < TheBitmap.getWidth() & iY < TheBitmap.getHeight())) { 
      return false; 
     } 
     return super.dispatchTouchEvent(event) 
    } 
} 
+0

如果點不在所需的區域,則需要在自定義按鈕中覆蓋此方法以返回false。我建議你去了解它是這樣的: 公共靜態MyButton類擴展的ImageButton { ... @覆蓋 公共布爾dispatchTouchEvent(MotionEvent事件){ INT的iX =(INT)event.getX(); int iY =(int)event.getY(); // TODO或者使用更復雜的基於像素值的條件 if(!(iX> = 0&iY> = 0&iX Nagaraja