2012-09-04 116 views
7

我想要这样的五个按钮,其中一个按钮由四个其他按钮环绕。就像这样:圆形按钮

enter image description here

我知道,与Android,我们只能有方型意见,怎么有可能做到这一点? OpenGl什么的?任何人有任何相关的链接?基本上我想要弯曲的按钮靠得很近。

回答

3

我的猜测是,在一天结束时,在自定义视图中执行此操作会更容易。

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

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

编辑

它发生,我认为也许你可以用一组TouchDelegate对象做到这一点。您将按照我之前介绍的方法来安排按钮,但仅允许容器可点击的父级。它将使用五个TouchDelegate来找出哪个按钮(如果有的话)在水龙头坐标下。不幸的是,TouchDelegate仅适用于Rect命中区域,这使我们开始了我们的起点。但是,您可以拆分source of TouchDelegate并定义您自己的版本,该版本可接受某种通用形状类别,而不只是Rect。 (形状类必须有相当于Rect.contains()才能测试一下,没有什么内置到Android中,但是你可以很容易地为你的特定形状编写你自己的类。)

你可以简化代码通过将命中和委托逻辑直接放在父容器视图中,但我认为它有更清洁的可重用委托类,它将事件处理从容器本身分离出来。

+0

+如果他将圆弧和圆弧之间的距离保持为r * sqrt(2) - r,则中心不会获得打算供其他人使用的水龙头。尽管如此,总体过度杀伤力。 – mehmetminanc

+0

嗯,我希望按钮非常靠近在一起,所以我不能在它们之间有很大的距离,我会不得不做类似2D图形的事情? – FabianCook

+0

@SmartLemon - 如果您使用自定义视图路线,您将使用[Canvas](http://developer.android.com/reference/android/graphics/Canvas.html)对象。我建议[创建自定义视图]的教程(http://developer.android.com/training/custom-views/index.html)开始。另请阅读指导主题[自定义组件](http://developer.android.com/guide/topics/ui/custom-components.html)。 –

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

+0

嗯,这似乎是值得研究的东西,但有没有如何构建当前屏幕的图像? – FabianCook