Drawable Resources是一个泛指的概念,指那些可以使用API(比如getDrawable(int) 方法)或者是XML格式的属性(比如android:drawable和android:icon)来访问的那些被展示在屏幕上的那些图形。有以下几种类型:

  • Bitmap File
    一张png、jpg,或者gif格式的图片

  • Nine-Patch File
    一张基于图像边缘内容可拉伸的png格式图片

  • Layer List
    包含多个Drawable对象的集合。有序集合,序列最大的位于顶层

  • State List
    一个针对View的不同状态(比如正常状态和按下时)引用不同图片的XML文件

  • Level List
    包含多个Drawable对象的集合,每个drawable存在一个对应的Level值,XML格式

  • Transition Drawable
    一个定义了两个Drawable之间淡入淡出效果的XML文件

  • Inset Drawable
    定义了一个Drawable根据一定距离插入到另外一个Drawable中的XMl文件,当需要对一个View指定一个小于它自身大小的背景图时,可以使用它

  • Clip Drawable
    定义了一个根据一个Drawable的当前level值裁剪后得到新Drawable的XML文件

  • Scale Drawable
    定义了一个根据一个Drawable的当前level值拉伸后得到新Drawable的XML文件

  • Shape Drawable
    定义的几何形,色彩和梯度的XML文件

除此之外还有 AnimationDrawable,参考

备注:颜色资源也可以看作一种XML Drawable,比如当你使用 State List Drawable时,你可以通过android:drawable来指定颜色作为属性(android:drawable=”@color/green”)

Bitmap

即位图,安卓中支持下面三种格式的文件: .png (推荐), .jpg (可选), .gif (不推荐)

你可以通过直接使用图片名作为资源ID来调用该文件,也可以创建一个XML文件为某张图片起一个别名。

备注:位图文件在编译过程中可能会被aapt tool自动优化为无损位图。比如,一张不需要多于256种颜色的 true-color PNG可能会被转化为一个带调色板的 8-bit PNG。这样就会得到一个同样图像质量,但是占用较少内存位图。所以要注意,放置在这些文件夹里的图片二进制在编译过程中会发生变化。如果你计划在读取一个图片作为一个位流以便将其转换为位图时,把你的图片放在res/raw/下来避免它们被优化而发生改变。

Bitmap File

一个.png、 .jpg, 或者 .gif格式的文件。当你把这些文件放置在res/drawable/ 目录下,安卓系统会创建对应的Drawable资源

  • 文件路径:res/drawable/filename.png (.png, .jpg, or .gif) 文件名就是对应的资源ID

  • 编译过的资源类型:BitmapDrawable

  • 资源引用:

    • JAVA中: R.drawable.filename
    • XML中: @[package:]drawable/filename
  • 示例:现有一张图片位于res/drawable/myimage.png,下面代码展示了如何应与于一个View上

<ImageView  android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/myimage" />

下面的代码展示了如何通过代码得到它

Resources res = getResources();Drawable drawable = res.getDrawable(R.drawable.myimage);

XML Bitmap

XML bitmap 是指向一个位图文件的XML文件。这样会为位图文件产生一个别名,改文件可以为图片指定诸如抖动和平铺的额外属性。

备注:你可以使用< bitmap > 元素来作为< item > 的一个子元素。例如,当创建一个 state list 或者 layer list,你可以不使用 android:drawable 属性,在< item > 中指定一个定义了一个drawable 对像的< bitmap >也是可以的

  • 文件路径:res/drawable/filename.xml 文件名就是对应的资源ID

  • 编译过的资源类型:BitmapDrawable

  • 资源引用:

    • JAVA中: R.drawable.filename
    • XML中: @[package:]drawable/filename
  • 语法:

<?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:mipMap=["true" | "false"]    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />

元素:

  • < bitmap > 定义了位图的根节点和它的属性

  • xmlns:android
    String类型. 定义了 XML 的命名空间,必须为”http://schemas.android.com/apk/res/android“。当指定在< bitmap >内部时,此属性并不需要书写,只有当< bitmap> 作为根节点时,此属性才是必须的。

  • android:src
    Drawable资源,必须。指向一个Drawable资源。

  • android:antialias
    Boolean类型。开启或者关闭抗锯齿。

  • android:dither
    Boolean类型。开启或关闭抖动,当位图和屏幕不具有相同的像素配置(例如:一个RGB 565屏幕和ARGB 8888位图)时。

  • android:filter
    Boolean类型。开启或关闭位图过滤。用于当图片拉伸或者收缩时得到光滑的图片。

  • android:gravity
    关键,用于定义位图重力。当位图小于容器大时,指定位图在容器中的位置。
    必须为下方的一个或者多个(用|来分割)常量:

说明
top 位于容器顶部,并不改变自身大小
bottom 位于容器底部,并不改变自身大小
left 位于容器左侧,并不改变自身大小
right 位于容器右侧,并不改变自身大小
center_vertical 在容器中垂直居中,并不改变自身大小
fill_vertical 增加对象的垂直大小让它完全充满其容器
center_horizontal 在容器中横向居中,并不改变自身大小
fill_horizontal 增加对象的横向大小让它完全充满其容器
center 在容器中居中,并不改变自身大小
fill 完全充满其容器增加对象的水平和垂直尺寸,默认值
clip_vertical 附加选项,用于按照容器的边来剪切对象的顶部和/或底部的内容。剪切基于其纵向对齐设置:顶部对齐时,剪切底部;底部对齐时剪切顶部;除此之外剪切顶部和底部。垂直方向裁剪
center_vertical 附加选项,用于按照容器的边来剪切对象的左侧和/或右侧的内容。剪切基于其横向对齐设置:左侧对齐时,剪切右侧;右侧对齐时剪切左侧;除此之外剪切左侧和右侧。水平方向裁剪
  • android:mipMap
    Boolean类型。开启或关闭mipMap提示。更多信息参考setHasMipMap(),默认值为关。

  • android:tileMode
    关键。定义了展示形式。当此属性启用时,bitmap会被重复显示, gravity会被忽略掉。

说明
disabled 不启用此属性,默认值
clamp 超过图片区域重复图片的边缘颜色
repeat 横向和纵向的重复展示图片
mirror 横向和纵向的重复展示图片,相邻的图片镜像相反,使得它们彼此结合在一起
  • 示例:
<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/icon" android:tileMode="repeat" />

Nine-Patch

一个NinePatch是一个定义了拉伸区域的PNG图片,当View尺寸大于图片时可被安卓系统拉伸。通常将这中类型指定为View的背景,该View的至少一个尺寸值为“wrap_content”,当View的尺寸被拉伸时,Nine-Patch位图也会拉伸自身来同View相适应,一个例子是安卓系统的标准按钮的背景图,它必须通过拉伸来适应按钮内的文本(或图像)。

同样作为一个正常的位图,你可以直接从XML资源文件中引用一个Nine-Patch文件

Nine-Patch File

  • 文件路径:res/drawable/filename.9.png 文件名就是对应的资源ID

  • 编译过的资源类型:NinePatchDrawable

  • 资源引用:

    • JAVA中: R.drawable.filename
    • XML中: @[package:]drawable/filename
  • 示例:下面的例子展示了如何在XML中对一个View指定一个名为res/drawable/myninepatch.9.png作为背景图

<Button  android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/myninepatch" />

XML Nine-Patch

一个XML Nine-Patch 是一个在XML格式中指定了一个Nine-Patch的资源文件。该XML可以指定图像的抖动属性。

  • 文件路径:res/drawable/filename.xml 文件名就是对应的资源ID

  • 编译过的资源类型:NinePatchDrawable

  • 资源引用:

    • JAVA中: R.drawable.filename
    • XML中: @[package:]drawable/filename
  • 语法:

<?xml version="1.0" encoding="utf-8"?><nine-patch  xmlns:android="http://schemas.android.com/apk/res/android" android:src="@[package:]drawable/drawable_resource" android:dither=["true" | "false"] />

元素:

  • < nine-patch> 定义了Nine-Patch的根节点和它的属性

  • xmlns:android
    String类型. 定义了 XML 的命名空间,必须为”http://schemas.android.com/apk/res/android“。

  • android:src
    Drawable资源,必须。指向一个 Nine-Patch文件。

  • android:dither
    Boolean类型。开启或关闭抖动,当位图和屏幕不具有相同的像素配置(例如:一个RGB 565屏幕和ARGB 8888位图)时。

  • 示例

<?xml version="1.0" encoding="utf-8"?><nine-patch xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/myninepatch" android:dither="false" />

更多相关文章

  1. 一行命令从 APK 文件中提取 Endpoint 及 URL
  2. Android图片压缩质量参数Bitmap.Config RGB_565、 ARGB_8888的含
  3. Android文件存储读写
  4. android R 文件 丢失的处理 如何重新生成
  5. Android基本数据存储方法
  6. Android安装常见的一些解决方法
  7. android 关机闹钟
  8. Android(安卓)Studio 高版本无法执行Java main方法的问题
  9. 第28章、列表视图ListView之一(从零开始学Android)

随机推荐

  1. Android(安卓)中插件的编写方法
  2. Android(安卓)Studio Intent 页面切换崩
  3. Android(安卓)Recovery Ui 分析
  4. Android(安卓)Studio怎么新建Android公共
  5. 如何让Android(安卓)UI设计性能更高效
  6. Android(安卓)系统Gsensor系统架构
  7. ArcGIS API for Android(安卓)案例教程 2
  8. Android中的几种网络请求方式详解
  9. Android中状态栏的隐藏
  10. Android(安卓)TextView文字横向自动滚动(