Drawable Resources Part I(Drawable 资源 第一部分)

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" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值