7

我想要这样的五个按钮,一个按钮被其他四个按钮包围。像这样:

在此处输入图像描述

我知道对于 Android,我们只能有方形视图,那么怎么可能做到这一点?OpenGL还是什么?任何人有任何相关的东西的链接?基本上我想要靠近在一起的弯曲按钮。

4

2 回答 2

3

我的猜测是,最终在自定义视图中执行此操作会更容易。

但是,如果您想使用股票视图,我建议您使用以下方法。首先,使用RelativeLayout 容器将四个外部按钮排列在一个2x2 网格中。然后定位中心按钮,使其与中心的网格重叠。将中心按钮放置在比周围四个按钮更高的 Z 位置(更靠近用户)。然后使用透明度作为按钮图像的一部分,让它们看起来像你想要的。然后(希望)尝试一下。如果 Z 顺序正确,则中心按钮将捕获原本会转到其他四个按钮之一的点击。

这实际上不会按原样工作,因为中心按钮方块会侵入周围的方块。我不知道它是否会起作用,但是您可以尝试用另一个按钮“碎片”网格替换中心按钮。除了中心按钮图像与网格单元重叠的位置之外,网格将具有空位置。你必须把它做得足够好,以避免侵入外部按钮图像。

编辑

我突然想到,也许你可以用一组TouchDelegate对象来做到这一点。您将按照我最初描述的那样排列按钮,但只使容器可点击。它将使用 5 个TouchDelegates 来找出哪个按钮(如果有)在点击坐标下。不幸的是,TouchDelegate只适用于Rect命中区域,这让我们从我们开始的地方开始。但是,您可以蚕食TouchDelegate 的源代码并定义您自己的版本,该版本接受某种通用形状类,而不仅仅是一个Rect. (形状类必须具有等价物Rect.contains()才能测试命中。Android 中没有内置任何内容,但您可以轻松地为您拥有的特定形状编写自己的类。)

您可以通过将命中和委托逻辑直接放在父容器视图中来稍微简化代码,但我认为,拥有一个可重用的委托类将事件处理与容器本身分开会更简洁。

于 2012-09-04T01:31:24.413 回答
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 才能完成任务,比如检查像素颜色。

于 2012-09-04T04:43:30.557 回答