Android 中 layer-list 的使用
layer-list 将多个图片或效果按照顺序层叠起来,通常和 selector、shape 配合使用。
layer-list 中的 item 是按照顺序从下往上叠加的,即先定义的 item 在下面,后面的依次往上面叠放。
实例:实现三面边框
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item >
<shape android:shape="rectangle" >
<solid android:color="#ff0000"/>
</shape>
</item>
<item android:bottom="2dp" android:top="2dp" android:right="2dp">
<shape android:shape="rectangle" >
<solid android:color="#ffffff" />
</shape>
</item>
</layer-list>
注意事项:
layer-list可以作为根节点,也可以作为selector中item的子节点。
layer-list可以添加多个item子节点,每个item子节点对应一个drawable资源,按照item从上到下的顺序叠加在一起,再通过设置每个item的偏移量就可以看到阴影等效果了。
layer-list的item可以通过下面四个属性设置偏移量:
- android:top 顶部的偏移量
- android:bottom 底部的偏移量
- android:left 左边的偏移量
- android:right 右边的偏移量
这四个偏移量和控件的margin设置差不多,都是外间距的效果。如何不设置偏移量,前面的图层就完全挡住了后面的图层,从而也看不到后面的图层效果了。
如:设置了android:bottom="50dp" android:top="50dp" android:left="50dp" android:right="50dp"属性
- android:top="50dp";表示该item上边以ImageView上边界往里面缩了50dp
- android:bottom="50dp"表示该item下边以ImageView下边界往里面缩了50dp
- android:left="50dp";表示该item左边以ImageView左边界往里面缩了50dp
- android:right="50dp";表示该item右边以ImageView右边界往里面缩了50dp
level-list 在Android开发中,有时候需要对一个 ImageView 设置很多不同图片以表示某种应用状态,比如,典型的是手机的信号强度从强到弱有多种状态图;wifi有解锁和未解锁状态,解锁和未解锁状态的图标也是很多种。如果每次都一一的通过 ImageView 设置图片的 src 来达到这一目的,实在是太过于繁琐,且维护和管理起来不便。因此,引入 ImageView 的 setImageLevel 和 level-list 实现这一目的。
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="0" android:drawable="@drawable/p0" />
<item android:maxLevel="1" android:drawable="@drawable/p1" />
<item android:maxLevel="2" android:drawable="@drawable/p2" />
<item android:maxLevel="3" android:drawable="@drawable/p3" />
<item android:maxLevel="4" android:drawable="@drawable/p3" />
</level-list>
ImageView image=(ImageView)findViewById(R.id.image);
image.setImageResource(R.drawable.xxxx);
image.setImageLevel(3);