2014-01-25 117 views
3

有没有人可以帮助创建这样的布局(我的意思是,如何选择图像的区域并将其转换为按钮?)? Something I want to create圆形按钮形成

+0

是中央圆(高尔夫球手)也被认为是一个按钮? –

+0

不,只有那些其他8个按钮 –

+0

好吧,让我准备一张图片,告诉你我将如何简化概念... –

回答

5

我多么(多简化)做到这一点的只有使用RelativeLayout的
这是想法:

enter image description here

绿色矩形区域仅仅是一个spacewasting TextView的。它是其他8个TextViews的两倍(你只需要8个,而不是12个!),它们明智地在它周围移动。

通过使用RelativeLayout容器中的以下属性toRightOf ...,可以轻松地对齐这些属性。

它们是可点击的(不是中央的),只需要您准备8个“图标”,您可以将所有其余的图像作为背景(只需用白色清除图标应放置的位置) 。

只需使用dp作为测量单位即可实现可扩展性。

这种设计非常简单,并且工作得很好。

与启动一些活动的点击侦听器相比,您不需要太多的代码。

您认为如何?

我发布了一个类似的在过去的答案:见here。该绘图是由代码完成的,但按钮在xml中被置换。

让XML布局过程非常类似,你需要的东西:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:background="#f000" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" 
    > 
    <TextView 
     android:id="@+id/txt9" 
     android:layout_width="160dp" 
     android:layout_height="160dp" 
     android:layout_centerInParent="true" 
     android:gravity="center" 
     android:text="9" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt1" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_above="@id/txt9" 
     android:layout_alignLeft="@id/txt9" 
     android:gravity="center" 
     android:text="1" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt8" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_alignTop="@id/txt1" 
     android:layout_toRightOf="@id/txt1" 
     android:gravity="center" 
     android:text="8" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt2" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_alignTop="@id/txt9" 
     android:layout_toLeftOf="@id/txt9" 
     android:gravity="center" 
     android:text="2" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt3" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_below="@id/txt2" 
     android:layout_toLeftOf="@id/txt9" 
     android:gravity="center" 
     android:text="3" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt4" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_below="@id/txt9" 
     android:layout_alignLeft="@id/txt9" 
     android:gravity="center" 
     android:text="4" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt5" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_alignTop="@id/txt4" 
     android:layout_toRightOf="@id/txt4" 
     android:gravity="center" 
     android:text="5" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt7" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_alignTop="@id/txt9" 
     android:layout_toRightOf="@id/txt9" 
     android:gravity="center" 
     android:text="7" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
    <TextView 
     android:id="@+id/txt6" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_below="@id/txt7" 
     android:layout_toRightOf="@id/txt9" 
     android:gravity="center" 
     android:text="6" 
     android:textSize="40sp" 
     android:textStyle="bold" 
     android:textColor="#ffff" 
    /> 
</RelativeLayout> 

随意使用ImageButtons代替TextViews(更合适,你的情况)。

对于8个按钮更清晰的视图,你会真正需要的是工作:

enter image description here

果岭的一杆是DUMMY

0

这可能是最好的实现为一个自定义视图。

您可以使用atan2从视图中心到用户触摸位置获取度数 - 如果触摸事件与视图中心之间的距离大于内圈的半径(在板球运动员周围),但不能大于外圈,那么你可以根据角度计算哪个按钮被点击(这更容易,因为它们都是相同的大小)。

你只需要一个白色背景资产,一边是灰线,然后画出8个围绕视图中心旋转的资产。然后将您的8个图标置于顶部,根据距离和角度计算其位置。 当用户触摸其中一个切片时,切换按下/单击状态的资产。