圆形按钮

7

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

enter image description here

我知道在Android中我们只能有正方形类型的视图,那么怎么可能做到这一点呢?使用OpenGL或者其他什么东西吗?有没有人有任何相关的链接?基本上我想要靠近的曲线按钮。

2个回答

3
我猜最后用自定义视图会更容易实现。但如果你想使用现有的视图,我建议以下步骤。首先,使用RelativeLayout容器将四个外部按钮排列成2x2网格。然后将中心按钮定位在重叠于网格中心的位置。将中心按钮放在比周围四个按钮更高的Z轴上(更靠近用户)。然后使用透明度作为按钮图像的一部分,使其看起来符合您的要求。然后(希望)尝试一下。如果Z顺序正确,则中心按钮将捕获本应传递给其他四个按钮的点击事件。
实际上这个方法不行,因为中心按钮的正方形会侵入周围的正方形。我不知道它是否可行,但你可以尝试用另一个按钮“片”网格替换中心按钮。该网格将除了中心按钮图像重叠到网格单元格处之外的空位置。你需要将它做得足够细致,以避免侵入外部按钮图像。
编辑:
我想到也许你可以用一组TouchDelegate对象来实现这个功能。你可以按照我一开始描述的方式排列按钮,但只让父容器可点击。它将使用五个TouchDelegate来找出在触摸坐标下的哪个按钮(如果有)。不幸的是,TouchDelegate仅适用于Rect命中区域,这使我们回到了起点。但是,你可以吞噬TouchDelegate的源代码并定义自己的版本,该版本接受某种通用形状类,而不仅仅是Rect。(该形状类必须具有等效于Rect.contains()的方法来测试是否命中。Android中没有内置的内容,但你可以轻松编写适用于特定形状的自己的类。)
你可以通过直接将命中和委托逻辑放在父容器视图中来简化代码,但我认为,拥有一个可重复使用的委托类,将事件处理与容器本身分离开来,会更加清晰。

如果他将圆和弧之间的距离保持为r * sqrt(2)- r,则中心不会被意图给其他人的触点所占用。虽然总体上有些过度,但仍需注意。 - mehmetminanc
嗯,我想让按钮彼此相当接近,所以它们之间不能有太大的距离,我需要做类似于2D图形的东西吗? - FabianCook
@SmartLemon - 如果你选择使用自定义视图,你将会用到一个Canvas对象。我建议先查看这个创建自定义视图的教程,了解如何入手。同时也要阅读指南主题 自定义组件 - Ted Hopp
@SmartLemon - 我有另一个想法;不知道是否更好。请查看我编辑后的回答。 - Ted Hopp
我相信我需要以某种方式制作一个视图出现位置的地图,并将当前的触摸事件与之匹配,但我还不确定如何生成它。 - FabianCook
显示剩余2条评论

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 才能完成任务,比如检查像素颜色。


嗯,这似乎值得研究,但有没有一种方法可以构建当前屏幕的图像? - FabianCook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接