android shape實現陰影或模糊邊效果


android實現陰影的方式有很多,

1.   Android 在 API21(5.0)添加了 elevation,可以很方便的在 View 上實現陰影。但是這個只在 >= API21 的手機上可以看到陰影效果,低於這個版本的就沒有陰影效果。

2.  CardView 也可以實現陰影效果,項目中一般都是使用這種方式實現卡片式的效果並帶有陰影。使用 CardView 確實很不錯,但是它在使用的時候也是需要有注意的地方:

 (1) CardView 實現陰影效果的布局,在 >= API 21 的版本上和 < 21 的版本上,如果不在代碼上做好控制,他們的顯示差異還是很大的。(2) CardView 在 >= API21 的版本上實現陰影效果也是通過 elevation 來實現的,最終的渲染是調用 native 方法進行的。在使用過程中發現在不同位置的 View 陰影的方向是不一樣的。不知道你們發現沒,它模擬的場景就是 光源的位置在屏幕中心的正上方,然后 View 的位置由光源的位置決定。陰影方向不一致。

3. 通過 .9 圖來制作陰影,這里通過一個很好的工具來制作哈:http://inloop.github.io/shadow4android/,這種方式制作小的背景陰影很模糊,效果上比不過 shape。

4. 用 SCardView 來實現陰影,使用方式和 CardView一樣,但是它是使用一套代碼,顯示不會有差異,而且可以通過設置光源的位置來控制陰影的方向以及陰影的顏色。

compile 'io.github.meetsl:SCardView:1.0'

5. 通過shape來實現,具體是通過layer-list 多層疊放的方式實現的。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 3     <!-- 邊 -->
 4     <item>
 5         <shape android:shape="rectangle">
 6             <padding
 7                 android:bottom="2dp"
 8                 android:left="2dp"
 9                 android:right="2dp"
10                 android:top="2dp" />
11             <solid android:color="#00CCCCCC" />
12             <corners android:radius="8dp" />
13         </shape>
14     </item>
15     <item>
16         <shape android:shape="rectangle">
17             <padding
18                 android:bottom="2dp"
19                 android:left="2dp"
20                 android:right="2dp"
21                 android:top="2dp" />
22             <solid android:color="#10CCCCCC" />
23             <corners android:radius="8dp" />
24         </shape>
25     </item>
26     <item>
27         <shape android:shape="rectangle">
28             <padding
29                 android:bottom="2dp"
30                 android:left="2dp"
31                 android:right="2dp"
32                 android:top="2dp" />
33             <solid android:color="#20CCCCCC" />
34             <corners android:radius="8dp" />
35         </shape>
36     </item>
37     <item>
38         <shape android:shape="rectangle">
39             <padding
40                 android:bottom="2dp"
41                 android:left="2dp"
42                 android:right="2dp"
43                 android:top="2dp" />
44             <solid android:color="#30CCCCCC" />
45             <corners android:radius="8dp" />
46         </shape>
47     </item>
48     <item>
49         <shape android:shape="rectangle">
50             <padding
51                 android:bottom="2dp"
52                 android:left="2dp"
53                 android:right="2dp"
54                 android:top="2dp" />
55             <solid android:color="#50CCCCCC" />
56             <corners android:radius="8dp" />
57         </shape>
58     </item>
59 
60     <!-- 中心背景 -->
61     <item>
62         <shape android:shape="rectangle"
63             android:useLevel="false">
64             <!-- 實心 -->
65             <solid android:color="#ffffff" />
66             <corners android:radius="10dp" />
67             <padding android:left="10dp"
68                 android:right="10dp"
69                 android:top="10dp"
70                 android:bottom="10dp"/>
71         </shape>
72     </item>
73 </layer-list>

使用

1 android:background="@drawable/layer_white_bg"


各種方式的差異
方式 是否有顯示差異 是否可以控制陰影方向 是否可以設置陰影顏色 陰影是否占位 是否模糊 繪制效率 其他
elevation 不可控制 不可設置 不占位 高,通過 native 繪制 只在 API 21 生效
CardView 不可控制 不可設置 不占位 Api 21 上效率高,通過native 繪制  
shape 可控 可設置 占位 一般  
.9 圖 可控,生效一次,更改需重新生成  可設置,更改需重新生成 占位 模糊 慢(加載圖片顯示)  
SCardView 可控 可設置 不占位 一般  
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM