android自定义按钮触摸事件

时间:2016-03-29 06:26:58

标签: android

我使用了4种不同颜色的自定义形状按钮。我试图通过获取如下所示的像素颜色来实现ontouch侦听器

$employee_list =  DB::table('employee')->select('last_name', 'first_name')->where('first_name','like', $search_name.'%')->orderBy('employee_id')->get();

然而,按钮的矩形区域重叠,因此如果像素是透明的,则下面的按钮不会被按下。另请注意所有按钮都有大的白色文字。我已经做了很多搜索,但无法弄清楚如何去做,任何帮助都会非常感谢。

XML     

@Override
public boolean onTouch(View v, MotionEvent event) {
    int x = (int) event.getX();
    int y = (int) event.getY();

    return isPixelTransparent(v, x, y) || v.onTouchEvent(event);
}

private boolean isPixelTransparent(View v, int x, int y) {
    Bitmap bmp = Bitmap.createBitmap(v.getDrawingCache());
    int color = Color.TRANSPARENT;
    try {
        color = bmp.getPixel(x, y);
    } catch (IllegalArgumentException e) {
        // x or y exceed the bitmap's bounds.
        // Reverts the View's internal state from a previously set "pressed" state.
        v.setPressed(false);
    }
    return color == Color.TRANSPARENT;
}

1 个答案:

答案 0 :(得分:0)

View只知道它自己的矩形空间,而不知道它背后的视图。因此,如果一个视图具有透明像素,它只会知道它自己的像素是透明的,而不是它背后的视图。

如果您希望视图绕过某些事件处理,则需要了解其背后的视图以及是否希望处理该事件。您无法使用单个视图的像素颜色执行此操作 - 您必须根据视图的整体布局自行编码此逻辑。