在Android中创建一个3D形状的按钮

13


我试图创建一个类似于这里的圆形按钮 -
http://livetools.uiparade.com/index.html
(每个按钮看起来都像是在一个沉浸式的区域内)我通过将按钮放在圆形背景中,并为它们两个都添加了一些渐变效果,但最终效果不相同,得到了如下结果 -

enter image description here

(我会上传我的代码一旦我可以)我该如何实现相同的外观呢?


1
友情提醒(因为他们仍然没有实现自动关闭通知):这个问题已经关闭了(几个月前)。您能否改进它使其有效? - Андрей Беньковский
2个回答

28
尝试此代码。我能够生成类似以下图片的图像。 Android xml button 这与您链接到的第一个按钮相似,使用以下代码。关键是使用将形状层叠在一起以产生所需的效果。 文件:res/drawable/button.xml
<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <!-- Outside border/shadow -->
  <item>
    <shape android:shape="oval">
      <size android:width="200dp" android:height="200dp" />
      <gradient android:angle="90" android:startColor="#f4f4f4" android:endColor="#b9b9b9" />
    </shape>
  </item>

  <!-- Inset -->
  <item android:top="1dp" android:left="1dp" android:right="1dp" android:bottom="1dp">
      <shape android:shape="oval">
        <gradient android:angle="90" android:startColor="#dcdcdc" android:endColor="#c9c9c9" />
      </shape>
  </item>

  <!-- Inside border/shadow -->
  <item android:top="15dp" android:left="15dp" android:right="15dp" android:bottom="15dp">
    <shape android:shape="oval">
      <gradient android:angle="90" android:startColor="#8c8c8c" android:endColor="#cbcbcb" />
    </shape>
  </item>

  <!-- Main button -->
  <item android:top="16dp" android:left="16dp" android:right="16dp" android:bottom="16dp">
    <shape android:shape="oval">
      <solid android:color="#ffffff" />
    </shape>
  </item>

  <!-- Button image -->
  <item android:top="70dp" android:left="70dp" android:right="70dp" android:bottom="70dp">
    <shape android:shape="rectangle">
      <solid android:color="#3b88c2" />
      <corners android:radius="20dp" />
    </shape>
  </item>

  <item android:top="75dp" android:left="75dp" android:right="75dp" android:bottom="75dp">
    <shape android:shape="rectangle">
      <solid android:color="#ffffff" />
      <corners android:radius="20dp" />
    </shape>
  </item>

  <item android:top="80dp" android:left="80dp" android:right="80dp" android:bottom="80dp">
    <shape android:shape="rectangle">
      <solid android:color="#3b88c2" />
      <corners android:radius="20dp" />
    </shape>
  </item>

</layer-list>
在您的主布局中,添加一个 ImageView 以显示此图像。
<ImageView
    android:src="@drawable/button" />

您可以通过在Java代码中为其设置OnClickListener来使ImageView可点击。


您刚刚获得了50个积分,先生..!=) - crazyPixel
好的例子兄弟。但我有一个问题。如何在这个形状中添加内容填充?因为按钮内的文本会触碰到边框。 - Shabbir Dhangot
@ShabbirDhangot 我不确定您正在添加文本的位置——据我所知,ImageView 不能容纳文本。如果您将 ImageView 更改为 Button,并设置 android:background="@drawable/button",则在 android:text 中设置的任何文本都将居中显示。您还可以尝试设置 ImageView / Buttonandroid:padding 属性。 - savanto

6

请前往此链接并生成自定义的3D按钮。

http://angrytools.com/android/button/

buttonshape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:radius="30dp"
/>
<gradient
android:gradientRadius="45"
android:centerX="35%"
android:centerY="50%"
android:startColor="##4CAB0B"
android:endColor="#004507"
android:type="radial"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="270dp"
android:height="60dp"
/>
<stroke
android:width="3dp"
android:color="#0B8717"
/>
</shape>

按钮代码
<Button
android:id="@+id/angry_btn"

android:text="Button"
android:textColor="#FFFFFF"
android:textSize="30sp"

android:layout_width="270dp"
android:layout_height="60dp"
android:background="@drawable/buttonshape"
android:shadowColor="#A8A8A8"
android:shadowDx="3"
android:shadowDy="2"
android:shadowRadius="8"
/>

哇!太棒了!!七年后那个链接还能用!!! - kbro

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