2

我有一些不规则形状的按钮,创建为 ImageButtons。ImageButtons 的“android:src”属性是具有透明背景的 .PNG 文件。并且这些 ImageButtons 的父布局有一个自定义的背景图像,它是用“android:background”属性定义的。所以活动的背景不是透明的或者只是黑色的。

我的问题是;如何检测单击按钮是在源图像的透明区域还是在源图像的可见部分?

我尝试使用 onTouchListener 来获取事件的坐标,并根据像素的颜色做出决定;但由于背景是彩色的,我无法达到目的。

很感谢任何形式的帮助。提前致谢!

4

1 回答 1

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)
    }
}
于 2013-05-06T13:31:33.510 回答