Create a 3d shaped button in android

34,972

Solution 1

Try this code. I am able to produce an image that looks like this

Android xml button

which is similar to the first button you link to, using the following code. The key is to use <layer-list> to layer shapes one over the other to produce the desired effect.

File: 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>

In your main layout, add an ImageView that will display this image.

<ImageView
    android:src="@drawable/button" />

You can make the ImageView clickable by giving it an OnClickListener in the Java code.

Solution 2

Go to this link and Generate Custom 3D button.

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 Code

<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"
/>
Share:
34,972
crazyPixel
Author by

crazyPixel

Updated on April 27, 2020

Comments

  • crazyPixel
    crazyPixel about 4 years


    I was trying to create a button similar in look to the round buttons over here -
    http://livetools.uiparade.com/index.html
    (every button looks like it is inside an immersed section) I had it by placing the button
    in a circle background and giving them both a little gradient that didnt end up the same
    though I got this result -

    enter image description here

    (I will upload my code once I can) how can I achieve that same look?

  • crazyPixel
    crazyPixel about 10 years
    You just got yourself 50 points right there sir..! =)
  • Shabbir Dhangot
    Shabbir Dhangot about 10 years
    Good Example brother. But I have one question. how to give content padding with this shape ? because text within button touches the border.
  • savanto
    savanto about 10 years
    @ShabbirDhangot I'm not sure where you are adding text -- As far as I know an ImageView cannot hold text. If you change the ImageView to a Button, and set android:background="@drawable/button", any text you set in android:text will be centered. You can also try setting the android:padding attribute of the ImageView/Button
  • kbro
    kbro over 3 years
    Wow! Marvellous!! 7 years later and that link still works!!!