如何在Android中实现非矩形按钮形状

6

嗨,我需要实现这个布局。它有如下布局:inactive buttons

我可以尝试使用图标作为图像按钮,但是按钮的活动状态有点像这个!one button has been pressed

我该如何处理呢?


1
这个问题不太好回答。顶部的按钮是相当容易定位的 ImageButton。棘手的是中间的圆圈。你可以为每个部分创建 ImageButton 并在程序中将它们定位到圆圈周围,但可点击区域会重叠。所以我认为最好的方法是使整个圆圈及所有按钮都可点击,并有一个触摸监听器来检测实际点击了圆圈的哪个部分。也许你可以简化并聚焦于那个特定的部分。顺便说一下:设计很不错! - jboi
@jboi,你完全理解了。 我能否使用触摸监听器方法显示每个按钮的两种状态?有示例吗? - dmSherazi
1
对于不同的可绘制状态,您可以使用“selector”或“LevelListDrawable”。通过它们,您可以定义不同级别下触摸和未触摸状态的不同位图。使用“ImageView.setLevel(...)”可以在运行时设置级别。 - jboi
1个回答

1
您应该按照以下方式使用选择器
  1. 准备两张按钮状态的图片,并将其放入 res/drawable 文件夹中。

    button_normal_green.png – 默认按钮图片。

    button_pressed_yellow.png – 当按钮被按下时显示。

  2. 现在,在“res/drawable/”文件夹中创建一个新的 XML 文件,可以随意命名,这里我们只给它起一个名字叫做“new_button.xml”。这个文件定义了哪个按钮状态属于哪个图片。

    <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
         <item android:drawable="@drawable/button_pressed_yellow" android:state_pressed="true" />
    
         <item android:drawable="@drawable/button_normal_green" />
      </selector>
    
3. 将背景设置为按钮。
<ImageButton
    android:id="@+id/imageButtonSelector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/new_button" />

请看完整示例

2
谢谢,我的实际问题是按钮的形状,如果我使用矩形形状,要么必须留下一些部分无法点击,要么它们会重叠。 - dmSherazi
选择器如何帮助按钮变成非矩形的? - Dims

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