可绘制资源是指能够被绘制到屏幕上的图形的一般化概念,并且能够用诸如getDrawable(int)等API方法来获取这些资源,或者使用诸如android:drawable和android:icon属性把它们应用到另一个XML资源中。以下是几种不同的可绘制资源类型:
位图文件:
位图图形文件(.png、.jpg或.gif)。每个位图资源会创建一个BitmapDrawable对象。
Nine-Patch文件:
Nine-Patch文件是一个带有可拉伸区域的PNG文件,它允许图片基于内容进行尺寸的调整(.9.png)。每个Nine-Patch资源会创建一个NinePatchDrawable对象。
层列表:
层列表管理一个绘制资源数组。它们会按照数组的顺序进行描画,因此索引最大的元素被画在最上面,一个层列表会创建一个LayerDrawable对象。
状态列表:
状态列表是一个XML文件,文件中针对不同的状态定义了要引用的不同位图图形(例如,按钮被按下时,要使用的不同的图片)。一个状态列表会创建一个StateListDrawable对象。
级别列表:
级别列表是一个定义可替代绘制资源的XML文件,每个资源都会给分配一个最大的数字值,一个状态列表会创建一个LevelListDrawable对象。
过渡绘制资源:
它是一个定义绘制资源的XML文件,文件中的绘制资源能够在两个绘制资源之间渐入渐出。一个XML文件会创建一个TransitionDrawable对象。
插图绘制资源:
它是一个定义绘制资源的XML文件,文件中的绘制资源能够按照指定的距离插入到另一个绘制资源中。当View对象需要绘制的背景比View的实际边框要小时,这个资源是有用的。
剪辑绘制资源:
它是一个定义绘制资源的XML文件,使用文件中的定义,基于绘制资源的当前级别值对另一个绘制资源进行剪辑。它会创建一个ClipDrawable对象。
缩放绘制资源:
它是一个定义绘制资源的XML文件,使用这个文件中的定义会基于当前的级别值来改变另一个绘制资源尺寸。它会创建一个ScaleDrawable对象。
形状绘制资源:
它是一个定义几何图形的XML文件,包括颜色和几何形状。它会创建一个ShapeDrawable对象。
注意:在XML中,颜色资源也能够用于绘制资源。例如,在创建状态列表绘制资源时,android:drawable属性就可以引用一个颜色资源(如:android:drawable=”@color/green”)。
位图
Android支持三种格式的位图文件:.png(首选)、.jpg(次选)、.gif(不推荐使用)。
可以使用资源ID(文件名)直接引用位图文件,也可以在XML中创建一个别名资源。
注意:在编译期间,位图文件可以被aapt工具用无损图像压缩技术来自动的优化。例如,一个真彩色的PNG图片,不需要超过256色就可以用调试板给转换成8为的PNG图片。这样就会生成同等质量的图片,但却需要很少的内存。因此而要注意,放在这个目录镇南关的二进制图片能够在编译期间发生改变。如果计划用字节流来读取图片,以便把它转换成一个位图,就要把图片放到res/raw/文件夹镇南关,这样它们就不会被优化。
位图文件
这里的位图文件是指.png、.jpg、.gif格式文件。当把这些格式的文件保存在res/drawable/目录时,Android会给这些文件创建一个绘制资源。
文件位置(FILE LOCATION):
res/drawable/filename.png(.png、.jpg或.gif)。
文件名用于资源ID。
编译资源的数据类型(COMPILED RESOURCE DATATYPE):
资源指向一个BitmapDrawable对象。
资源引用(RESOURCE REFERENCE):
在Java代码中:R.drawable.filename;
在XML中:@[package:]drawable/filename
列子(EXAMPLE):
把一个图片保存在res/drawable/muimage.png中,布局XML把这个图片应用于一个View对象:
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/myimage"/>
应用程序在代码中用getDrawable()方法来获取Drawable对象:
Resources res=getResources();
Drawable drawable= res.getDrawable(R.drawable.myimage);
XML位图
XML位图是一个定义在XML中的资源,它指向一个位图文件。它是原始位图文件的一个别名。XML能够给位图指定额外的属性,如仿色和平铺。
注意:能够把<bitmap>元素作为<item>元素的子元素来使用。例如,在创建状态列表或层列表时,能够从<item>元素中排除android:drawable属性,并且在<item>元素内部嵌入一个<bitmap>元素来定义绘制项目。
文件位置(FILE LOCATION):
res/drawable/filename.xml
文件名被用作资源ID。
编译资源的数据类型(COMPILED RESOURCE DATATYPE):
资源指向一个BitmapDrawable对象。
资源引用(RESOURCE REFERENCE):
在Java代码中:R.drawable.filename
在XML中:@[package:]drawable/filename
语法(SYNTAX):
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:antialias=["true" |"false"]
android:dither=["true" |"false"]
android:filter=["true" |"false"]
android:gravity=["top" |"bottom" |"left" | "right" |"center_vertical" |
"fill_vertical" |"center_horizontal" |"fill_horizontal" |
"center" |"fill" |"clip_vertical" |"clip_horizontal"]
android:tileMode=["disabled" |"clamp" |"repeat" | "mirror"]/>
元素(ELEMENTS):
<bitmap>
用来定义位图资源和资源属性。
属性(ATTRIBUTES):
xmlns:android
字符串值,定义XML的命名空间,必须是“http://schemas.android.com/apk/res/android”。如果<bitmap>是根元素,那么这个属性就是必须的。当<bitmap>被嵌套在<item>内时,就不需要了。
android:src
绘制资源。必须的。它指向一个要绘制的资源。
android:antialias
布尔值。启用或禁用抗锯齿效果。
android:dither
布尔值。如果位图没有与屏幕相同的像素配置,这个属性会指示启用或禁用位图的仿色处理。
android:filter
布尔值,启用或禁用位图的过滤处理。在位图收缩或拉伸时,使用过滤处理让外观更平滑。
android:gravity
关键属性。定义位图的重心。如果位图比容器小,重心会指示绘制资源在容器中位置。
必须是下列常量值的组合(组合设定时使用”|”符号分离):
值 | 说明 |
top | 把对象放到它的容器的顶部,不改变对象的尺寸。 |
bottom | 把对象放到它的容器的底部,不改变对象的尺寸。 |
left | 把对象放到它的容器的左边缘,不改变对象的尺寸。 |
right | 把对象放到它的容器的右边缘,不改变对象的尺寸。 |
center_vertical | 把对象放到它的容器的垂直中心,不改变对象的尺寸。 |
fill_vertical | 如果需要,对象的垂直尺寸会增长,以便垂直方向完全填充它的容器。 |
center_horizontal | 把对象放到它的容器的水平中心,不改变对象的尺寸。 |
fill_horizontal | 如果需要,对象的水平尺寸会增长,以便水平方向完全填充它的容器。 |
center | 把对象放到容器的中心位置,不改变尺寸。 |
fill | 如果需要,对象的水平和垂直尺寸都会增长,以便能够完全填充它的容器。 |
clip_vertical | 附加选项,能够设置把子对象的上边缘或下边缘裁剪到容器边框位置。裁剪要基于垂直中心的设置,top时要裁剪下边缘,bottom时要裁剪上边缘,而不是上下都要裁剪。 |
clip_horizontal | 附加选项,能够设置把子对象的左边缘或右边缘裁剪到容器边框位置。裁剪要基于水平中心的设置,left时要裁剪右边缘,right时要裁剪左边缘,而不是两边都要裁剪。 |
android:tileMode
关键属性,指定采用平铺模式绘制资源,当这个模式被启用时,位图会被重复绘制,以便能够完全填充绘制区域。在平铺模式启用时,重心会被忽略。
这个模式必须设置下列常量值之一:
值 | 说明 |
disabled | 不平铺位图,这是默认值。 |
clamp | 如果要在原始边框的外部绘制阴影,则复制边缘的颜色。 |
repeat | 在水平和垂直方向重复绘制带阴影的图片。 |
mirror | 在水平和垂直方向重复绘制带阴影的图片,交替复制,以便相邻的图片之间始终有缝隙。 |
例子(EXAMPLE):
<?xml version="1.0" encoding="utf-8"?>
<bitmapxmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/icon"
android:tileMode="repeat"/>