LayerDrawable是用来管理其他drawables数组的drawable对象。在这个列表中的每个drawable都会按照在列表中的顺序被画出来-列表中的最后一个drawable会被画到顶部。
在<layer-list>中每个drawable都用<item>元素来表示。
res/drawable/filename.xml
这个文件名作为资源标识
LayerDrawable。
在Java中,R.drawable.filename
在XML中,@[package:]drawable/filename
<?xml version="1.0" encoding="utf-8"?>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</layer-list>
<layer-list>
必须。必须作为根元素。它包含一个或多个<item>元素。
属性:
xmlns:android
字符串。必须。定义这个XML的命名空间,必须是"http://schemes.android.com/apk/res/android"。
<item>
定义放在layer drawable中的drawable,同时定义它的属性。必须是<selector>的子元素。也可用<bitmap>作为子元素。
属性:
android:drawable
Drawable资源。必须。引用drawable资源。
android:id
资源ID。这个drawable的唯一资源ID。为了给这项创建新的资源ID,需要使用:“@+id/name”。加号表示应当创建新的ID。你能通过View.findViewById()或Activity.findViewById()来用这个标识检索和修改这个drawable。
android:top
Integer。以像素为单位的顶部偏移
android:right
Integer。以像素为单位的右边偏移
android:bottom
Integer。以像素为单位的底部偏移
android:left
Integer。以像素为单位的左边偏移
默认情况下所有的drawable项都会缩放到容器视图的尺寸。所以,在layer列表不同位置放置图片可能会增大视图尺寸并且图片也会相应地缩放。为了避免缩放列表中的项,应当在<item>元素内部使用<bitmap>元素来指定这个drawable,同时定义gravity来避免缩放,例如"center"。例如,采用如下方式定义的<item>会将尺寸缩放到它的容器视图大小:
<item android:drawable="@drawable/image" />
为了避免缩放,下面的例子使用了带有居中gravity的<bitmap>元素:
<item>
<bitmapandroid:src="@drawable/image"
android:gravity="center" />
</item>
保存在res/drawable/layers.xml中的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/android_red"android:gravity="center" />
</item>
<item android:top="10dp" android:left="10dp">
<bitmapandroid:src="@drawable/android_green"android:gravity="center" />
</item>
<item android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue" android:gravity="center" />
</item>
</layer-list>
注意在这个例子中使用了内嵌带有"center" gravity的<bitmap>元素来为每项定义drawable资源。这就保证了由于偏移图片而导致重构尺寸时没有图片会放大到容器的尺寸。
在XML布局中将这个drawable应用到视图:
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/layers" />
结果就是偏移量越来越来大的图片栈。
LayerDrawable