android shape实现阴影或模糊边效果

android实现阴影的方式有不少,android

1.   Android 在 API21(5.0)添加了 elevation,能够很方便的在 View 上实现阴影。可是这个只在 >= API21 的手机上能够看到阴影效果,低于这个版本的就没有阴影效果。git

2.  CardView 也能够实现阴影效果,项目中通常都是使用这种方式实现卡片式的效果并带有阴影。使用 CardView 确实很不错,可是它在使用的时候也是须要有注意的地方:github

 (1) CardView 实现阴影效果的布局,在 >= API 21 的版本上和 < 21 的版本上,若是不在代码上作好控制,他们的显示差别仍是很大的。(2) CardView 在 >= API21 的版本上实现阴影效果也是经过 elevation 来实现的,最终的渲染是调用 native 方法进行的。在使用过程当中发如今不一样位置的 View 阴影的方向是不同的。不知道大家发现没,它模拟的场景就是 光源的位置在屏幕中心的正上方,而后 View 的位置由光源的位置决定。阴影方向不一致。bash

3. 经过 .9 图来制做阴影,这里经过一个很好的工具来制做哈:http://inloop.github.io/shadow4android/,这种方式制做小的背景阴影很模糊,效果上比不过 shape。工具

4. 用 SCardView 来实现阴影,使用方式和 CardView同样,可是它是使用一套代码,显示不会有差别,并且能够经过设置光源的位置来控制阴影的方向以及阴影的颜色。oop

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>

使用spa

1 android:background="@drawable/layer_white_bg"


各类方式的差别
方式 是否有显示差别 是否能够控制阴影方向 是否能够设置阴影颜色 阴影是否占位 是否模糊 绘制效率 其余
elevation 不可控制 不可设置 不占位 高,经过 native 绘制 只在 API 21 生效
CardView 不可控制 不可设置 不占位 Api 21 上效率高,经过native 绘制  
shape 可控 可设置 占位 通常  
.9 图 可控,生效一次,更改需从新生成  可设置,更改需从新生成 占位 模糊 慢(加载图片显示)  
SCardView 可控 可设置 不占位 通常
相关文章
相关标签/搜索