2012-04-02 94 views
7

我已经从形状做了一个按钮背景,看起来相当不错,我的目的。唯一需要的是放下一点阴影。 下面是代码:安卓按钮的背景形状与阴影

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"> 
     <shape> 
      <solid android:color="#343434" /> 

      <stroke android:width="1dp" android:color="#171717" /> 

      <corners android:radius="3dp" /> 

      <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <gradient android:angle="270" android:endColor="#E2E2E2" android:startColor="#BABABA" /> 

      <stroke android:width="1dp" android:color="#BABABA" /> 

      <corners android:radius="4dp" /> 

      <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> 
     </shape> 
    </item> 

</selector> 

这是我想达到

enter image description here

什么如何退出的阴影?我的猜测是,我需要制作另一个形状,但有黑色/灰色背景,并设置某种类型的左侧边距填充以使其看起来像阴影。但我不知道该怎么做......而且文档并没有太多帮助我。

后来编辑:我想在xml文件中添加阴影,而不是通过代码。 谢谢。

+0

这就是我要做的 [http://stackoverflow.com/a/11579459/672773][1] [1]:http://stackoverflow.com/a/11579459/672773 希望这样可以帮你 – Machete 2013-03-11 15:11:14

回答

11

如果你想堆更多的形状一个在彼此的顶部,那么你可以使用一个layer-list。贝娄是在你选择正常项目的代码(与灰色的条):

<item> 
    <layer-list> 
     <item android:right="5dp" android:top="5dp"> 
      <shape> 
       <corners android:radius="3dp" /> 
       <solid android:color="#D6D6D6" /> 
      </shape> 
     </item> 
     <item android:bottom="2dp" android:left="2dp"> 
      <shape> 
       <gradient android:angle="270" android:endColor="#E2E2E2" android:startColor="#BABABA" /> 
       <stroke android:width="1dp" android:color="#BABABA" /> 
       <corners android:radius="4dp" /> 
       <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> 
      </shape> 
     </item> 
    </layer-list> 
</item> 

的问题是,你将无法达到对您Button一个真正的影子看这种类型的绘制。您可以使用其他答案中的代码或已有影子的九个修补程序映像。

4
Paint mShadow = new Paint(); 
// radius=10, y-offset=2, color=black 
mShadow.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
// in onDraw(Canvas) 
canvas.drawBitmap(bitmap, 0.0f, 0.0f, mShadow); 

此代码是从Android的罗曼盖伊可以在这里找到:http://www.devoxx.com/download/attachments/1705921/D8_C_10_09_04.pdf

+0

谢谢你的回答,我注意到了。在这种情况下,我忘了提及我想在xml文件中直接添加阴影。 – Alin 2012-04-02 10:53:40

+0

链接是404.太糟糕了 – 2015-09-15 10:00:08

5

尝试......

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape> 
      <solid android:color="#000000" /> 

      <corners android:radius="7dp" /> 
     </shape> 
    </item> 
    <item 
     android:bottom="5px" 
     android:left="5px"> 
     <shape> 
      <solid android:color="#FF0000" /> 

      <corners android:radius="7dp" /> 
     </shape> 
    </item> 
</layer-list> 
1

你可以试试下面的代码还以获取视图顺利边框阴影:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

<item> 
    <shape> 
     <solid android:color="#88000000" /> 

     <corners android:radius="15dp" /> 
    </shape> 
</item> 
<item 
    android:bottom="5px" 
    android:right="5px"> 
    <shape> 
     <solid android:color="#55B0CF" /> 

     <stroke 
      android:width="2dp" 
      android:color="#ffffff" /> 

     <corners android:radius="7dp" /> 
    </shape> 
</item> 

2

你可以试试这个:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
<!-- Bottom Shadow Darker Line--> 
<item> 
    <shape android:shape="rectangle" > 
     <solid android:color="@color/blue_darker" /> 
     <corners android:radius="9dip" /> 
    </shape> 
</item>  


<!-- Main Content Gradient --> 
<item android:bottom="1dip"> 
    <shape android:shape="rectangle" android:dither="false" > 
     <gradient 
      android:startColor="@color/blue_dark" 
      android:centerColor="@color/blue_medium" 
      android:endColor="@color/blue_light" 
      android:type="linear" 
      android:angle="90"/> 
     <corners android:radius="9dip" /> 
    </shape> 
</item> 

<!-- Upper Shadow Dark Line --> 
<item android:bottom="1dip" android:left="1dip" android:right="1dip"> 
    <shape android:shape="rectangle" > 
     <gradient 
      android:centerX="0.98" 
      android:centerY="0" 
      android:startColor="@android:color/transparent" 
      android:centerColor="@android:color/transparent" 
      android:endColor="@color/blue_medium" 
      android:type="linear" 
      android:angle="90"/>    
     <corners android:radius="9dip" /> 
    </shape> 
</item>  

1

在这种情况下,我使用的lib https://github.com/dmytrodanylyk/shadow-layout

首先,你应该把它在gradle这个

dependencies { 
    compile 'com.github.dmytrodanylyk.shadow-layout:library:1.0.3' 
} 

然后把你的按钮进入ShadowLayout

<com.dd.ShadowLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:sl_shadowRadius="3dp" 
     app:sl_shadowColor="@color/your_color"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </com.dd.ShadowLayout> 

这是worsk非常适合我)