我使用了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;
}
答案 0 :(得分:0)
View只知道它自己的矩形空间,而不知道它背后的视图。因此,如果一个视图具有透明像素,它只会知道它自己的像素是透明的,而不是它背后的视图。
如果您希望视图绕过某些事件处理,则需要了解其背后的视图以及是否希望处理该事件。您无法使用单个视图的像素颜色执行此操作 - 您必须根据视图的整体布局自行编码此逻辑。