2011-03-04 107 views
94

是否可以在Android中將自定義形狀添加到自定義形狀中?查看完文檔後,我只能看到應用文字陰影的方法。在Android上爲自定義形狀添加陰影

我已經試過這沒有運氣:

<?xml version="1.0" encoding="UTF-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="#90ffffff"/> 
     <corners android:radius="12dp" /> 
    <item name="android:shadowColor">#000000</item> 
    <item name="android:shadowRadius">5</item> 
    <item name="android:shadowDy">3</item> 
    </shape> 

回答

7

如果你不介意做一些定製與畫布繪製API,看看這個答案約drop shadows。這是一個follow-up問題,它修復了原始問題。

23

以下工作適用於我:只保存爲custom_shape.xml。

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

    <!-- "shadow" --> 
    <item> 
     <shape android:shape="rectangle" > 
      <solid android:color="#000000"/> 
      <corners android:radius="12dp" /> 
     </shape> 
    </item> 


    <item android:bottom="3px"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#90ffffff"/> 
      <corners android:radius="12dp" /> 
     </shape> 
    </item> 

</layer-list> 
2

我覺得這個陰影值適用於大多數情況下:

<solid android:color="#20000000" /> 
70

這是我要做的事:

Android Native Button with Shadows

代碼波紋管的一個按鈕狀態:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!-- "background shadow" --> 
    <item> 
     <shape android:shape="rectangle" > 
      <solid android:color="#000000" /> 

      <corners android:radius="15dp" /> 
     </shape> 
    </item> 
    <!-- background color --> 
    <item 
     android:bottom="3px" 
     android:left="3px" 
     android:right="3px" 
     android:top="3px"> 
     <shape android:shape="rectangle" > 
      <solid android:color="#cc2b2b" /> 


      <corners android:radius="8dp" /> 
     </shape> 
    </item> 
    <!-- over left shadow --> 
    <item> 
     <shape android:shape="rectangle" > 
      <gradient 
       android:angle="180" 
       android:centerColor="#00FF0000" 
       android:centerX="0.9" 
       android:endColor="#99000000" 
       android:startColor="#00FF0000" /> 

      <corners android:radius="8dp" /> 
     </shape> 
    </item> 
    <!-- over right shadow --> 
    <item> 
     <shape android:shape="rectangle" > 
      <gradient 
       android:angle="360" 
       android:centerColor="#00FF0000" 
       android:centerX="0.9" 
       android:endColor="#99000000" 
       android:startColor="#00FF0000" /> 

      <corners android:radius="8dp" /> 
     </shape> 
    </item> 
    <!-- over top shadow --> 
    <item> 
     <shape android:shape="rectangle" > 
      <gradient 
       android:angle="-90" 
       android:centerColor="#00FF0000" 
       android:centerY="0.9" 
       android:endColor="#00FF0000" 
       android:startColor="#99000000" 
       android:type="linear" /> 

      <corners android:radius="8dp" /> 
     </shape> 
    </item> 
    <!-- over bottom shadow --> 
    <item> 
     <shape android:shape="rectangle" > 
      <gradient 
       android:angle="90" 
       android:centerColor="#00FF0000" 
       android:centerY="0.9" 
       android:endColor="#00FF0000" 
       android:startColor="#99000000" 
       android:type="linear" /> 

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

那麼你應該有與按鈕的diferent版本,就像一個選擇:

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

    <item android:drawable="@drawable/ic_button_red_pressed" android:state_pressed="true"/> <!-- pressed --> 
    <item android:drawable="@drawable/ic_button_red_selected" android:state_focused="true"/> <!-- focused --> 
    <item android:drawable="@drawable/ic_button_red_selected" android:state_selected="true"/> <!-- selected --> 
    <item android:drawable="@drawable/ic_button_red_default"/> <!-- default --> 

</selector> 

希望這可以幫助you..good運氣

+0

真的很酷!! – MastAvalons 2012-08-21 14:01:31

+0

是非常好的jmachete。只需要一點調整就可以了。 +1 – 2013-02-08 21:39:40

+0

非常感謝你的好例子。這幫助了我很多。 – Kailas 2013-10-30 05:09:52

19

我覺得這個方法產生了很好的效果:

<!-- Drop Shadow Stack --> 
<item> 
    <shape> 
     <padding 
       android:top="1dp" 
       android:right="1dp" 
       android:bottom="1dp" 
       android:left="1dp"/> 
     <solid android:color="#00CCCCCC"/> 
    </shape> 
</item> 
<item> 
    <shape> 
     <padding 
       android:top="1dp" 
       android:right="1dp" 
       android:bottom="1dp" 
       android:left="1dp"/> 
     <solid android:color="#10CCCCCC"/> 
    </shape> 
</item> 
<item> 
    <shape> 
     <padding 
       android:top="1dp" 
       android:right="1dp" 
       android:bottom="1dp" 
       android:left="1dp"/> 
     <solid android:color="#20CCCCCC"/> 
    </shape> 
</item> 
<item> 
    <shape> 
     <padding 
       android:top="1dp" 
       android:right="1dp" 
       android:bottom="1dp" 
       android:left="1dp"/> 
     <solid android:color="#30CCCCCC"/> 
    </shape> 
</item> 
<item> 
    <shape> 
     <padding 
       android:top="1dp" 
       android:right="1dp" 
       android:bottom="1dp" 
       android:left="1dp"/> 
     <solid android:color="#50CCCCCC"/> 
    </shape> 
</item> 

<item> 

    <shape android:shape="rectangle"> 
     <stroke android:color="#CCC" android:width="1dp"/> 
     <solid android:color="#FFF" /> 
     <corners android:radius="2dp" /> 

    </shape> 

</item> 

,我發現這個在: http://www.uifuel.com/android-creating-a-drop-shadow-in-xml-layout/

+0

謝謝,Joakim。我發現這非常有用。 – BruceHill 2013-03-29 21:58:04

130

搜索後大量的最終我得到了這個

enter image description here

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

<!-- Bottom 2dp Shadow --> 
<item> 
    <shape android:shape="rectangle"> 

     <solid android:color="#d8d8d8" /> 
     <corners android:radius="7dp" /> 

    </shape> 
</item> 

<!-- White Top color --> 
<item android:bottom="3px"> 

    <shape android:shape="rectangle"> 

    <solid android:color="#FFFFFF" /> 
    <corners android:radius="7dp" /> 


    </shape> 

</item> 


</layer-list> 
+1

很好...很好的工作 – 2014-08-01 11:49:39

+1

我真的需要這個,非常感謝! – Eddy 2014-10-23 08:38:06

+0

這正是我正在尋找的。完善。 – daVe 2014-11-14 17:14:57

35

這是我的版本陰影的。我正在爲所有形狀周圍的朦朧陰影,並使用this answerJoakim Lundborg作爲我的出發點。我改變的是爲所有影子項目添加角點併爲每個後續影子項目增加角點的半徑。因此,這裏的xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Drop Shadow Stack --> 
    <item> 
     <shape> 
      <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" /> 
      <solid android:color="#02000000" /> 
      <corners android:radius="8dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" /> 
      <solid android:color="#05000000" /> 
      <corners android:radius="7dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" /> 
      <solid android:color="#10000000" /> 
      <corners android:radius="6dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" /> 
      <solid android:color="#15000000" /> 
      <corners android:radius="5dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" /> 
      <solid android:color="#20000000" /> 
      <corners android:radius="4dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" /> 
      <solid android:color="#25000000" /> 
      <corners android:radius="3dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" /> 
      <solid android:color="#30000000" /> 
      <corners android:radius="3dp" /> 
     </shape> 
    </item> 

    <!-- Background --> 
    <item> 
    <shape> 
      <solid android:color="#0099CC" /> 
     <corners android:radius="3dp" /> 
    </shape> 
    </item> 
</layer-list> 
+0

謝謝。這是最好的答案。給出了一個很好的模糊投影。 – 2015-06-19 10:06:30

+0

幾乎同意,這個解決方案給出了很好的結果 – Sergey 2018-03-07 11:17:48

2

enter image description here

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

     <solid android:color="@android:color/white" > 
     </solid> 

     <stroke 
      android:width="1dp" 
      android:color="@color/LightGrey" > 
     </stroke> 

     <padding 
      android:bottom="5dp" 
      android:left="2dp" 
      android:right="2dp" 
      android:top="5dp" > 
     </padding> 

     <corners 
      android:bottomLeftRadius="20dp" 
      android:bottomRightRadius="20dp" 
      android:radius="12dp" 
      android:topLeftRadius="20dp" 
      android:topRightRadius="20dp" /> 

     <gradient 
      android:angle="90" 
      android:centerColor="@android:color/white" 
      android:centerY="0.2" 
      android:endColor="#99e0e0e0" 
      android:startColor="@android:color/white" 
      android:type="linear" /> 

    </shape> 
3

老問題,但海拔,可提供材質設計現在提供了一個陰影的任何意見。

<TextView 
android:id="@+id/myview" 
... 
android:elevation="2dp" 
android:background="@drawable/myrect" /> 

請參閱該文檔在https://developer.android.com/training/material/shadows-clipping.html

+0

謝謝你,非常有用和簡單。這就是我要找的。 – aul 2016-08-16 23:38:58

+0

嗯/這個答案需要成爲頂尖人物!人們仍然沉默寡言,用舊的方法來解決這一習俗陰影 – Sergey 2018-03-07 03:27:55