我希望有这样的五个按钮,一个按钮被其他四个按钮包围。就像这样:
我知道在Android上我们只能有方形视图,所以怎么可能这样做呢? OpenGl还是什么?任何人有任何相关的链接?基本上我想要靠近的弯曲按钮。
答案 0 :(得分:3)
我的猜测是,在一天结束时,在自定义视图中执行此操作会更容易。
但是如果你想使用股票视图,我建议如下。首先,使用RelativeLayout容器在2x2网格中排列四个外部按钮。然后放置中心按钮,使其与中心的网格重叠。将中心按钮放在比周围四个按钮更高的Z(更靠近用户)处。然后使用透明度作为按钮图像的一部分,使它们看起来像你想要的。然后(希望)尝试一下。如果Z顺序正确,则中心按钮将捕获否则将转到其他四个按钮之一的轻敲。
这实际上不会按原样工作,因为中心按钮方块会侵入周围的方块。我不知道它是否会起作用,但你可以尝试用另一个按钮“碎片”替换中心按钮。除了中心按钮图像与网格单元重叠之外,网格将具有空位置。你必须使其足够精细以避免侵入外部按钮图像。
修改强>:
我想到也许你可以用一组TouchDelegate个对象来做这件事。您可以按照我先描述的那样排列按钮,但只能使父容器可点击。它会使用五个TouchDelegate
来找出哪个按钮(如果有的话)位于抽头坐标下面。不幸的是,TouchDelegate
仅适用于Rect
点击区域,这使我们离开了我们的位置。但是,您可以蚕食source of TouchDelegate并定义您自己的版本,它接受某种通用形状类而不仅仅是Rect
。 (形状类必须具有相当于Rect.contains()
来测试命中。在Android中没有内置任何东西,但是你可以轻松地为你拥有的特定形状编写自己的类。)
您可以通过将命中和委托逻辑直接放在父容器视图中来简化代码,但我认为,有一个可重用的委托类可以将事件处理与容器本身分开。
答案 1 :(得分:1)
您可以使用遮罩颜色,例如: 一个完全红色的按钮,就像你发布的图像一样,只需对红色按钮进行像素颜色检查,例如:
bool insideMyAwsomeShapeButton(int mouse_x,int mouse_y) {
if get_image_pixel_color_at_pos(mouse_x,mouse_y) == rgbcolor(1,0,0)
{
return true;
}
return false; }
再次,这只是一个想法,你必须找到android上的特定api来完成任务,比如检查像素颜色。