LeveListDrawable通常用来管理一组Drawable资源,通过LeveListDrawable的控制,我们可以很方便的实现这些Drawable资源的现实切换。LeveListDrawable里面的每一个drawable资源与一个最大数值结合起来,作为LevelListDrawable资源的一项。
调用Drawable的setLevel()方法可以加载level-list或代码中定义的某个drawable资源,判断加载某项的方式:level-list中某项的Android:maxLevel数值大于或者等于setLevel设置的数值,就会被加载。
LeveListDrawable的xml资源文件定义
位置
res/drawable/filename.xml语法
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/drawable_resource"
android:maxLevel="integer"
android:minLevel="integer" />
</level-list>
- 元素
<level-list>
必须作为根节点。包含多个<item>节点。
属性:
xmlns:android
String类型。必须的。定义XML文件的命名空间,必须是 "http://schemas.android.com/apk/res/android".
<item>
定义某个level使用的drawable资源
属性:
android:drawable
Drawable 资源。必须的。引用一个Drawable资源
android:maxLevel
Integer类型。该项所允许的最大level。
android:minLevel
Integer类型。该项所允许的最小level。
使用实例
- 在XML文件中定义level_list.xml:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="1" android:drawable="@drawable/image1" />
<item android:maxLevel="2" android:drawable="@drawable/image2" />
<item android:maxLevel="3" android:drawable="@drawable/image3" />
<item android:maxLevel="4" android:drawable="@drawable/image4" />
<item android:maxLevel="5" android:drawable="@drawable/image5" />
</level-list>
- 在布局文件使用
<ImageView
android:id="@+id/imgView"
android:src="@drawable/level_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
- 在代码中调用
ImageView imageView = (ImageView) findViewById(R.id.imgView);
imageView.setImageLevel(1);//默认的level为0,此处设置为1
注:ImageView提供了setImageLevel来设置src的Drawable的Level。
- 作为背景
将一个LevelListDrawable作为一个View的background后,可以通过View的getBackground()方法获取这个Drawable对象,然后调用这个Drawable对象的setLevel()方法,提供不同的Level值,就可以改变View的背景。这个可以用来制作诸如进度条、音量调节等效果。
注意事项
- 默认的level为0,如果没有和0匹配的level,那么就不显示。
- level匹配以maxLevel优先。即如果有个item,min:1,max:2。 另一份item,min:2,max:3。
如果此时设置level=2,那么会匹配第一个item。 - item元素级别里面不能出现负数,只能是正整数,并且要么是升序,要么是倒序,顺序乱了可能引起不起作用的现象。