参考文献:

Android中Drawable整体介绍

1. 简介

Drawable 表示一种可以在 Canvas 上进行绘制的抽象的概念,它有很多种,常见的如颜色和图片都可以是一个Drawable。

优点

使用简单,比自定义 View 的成本要低
非图片类型的 Drawable 占空间较小

说明

简单来讲,其可以理解为:图像、
它不全是图片,通过颜色也可以构造出各种各样的图片效果,它一般就是当做 View 的背景使用,他有两种方式,一种是通过 XML,一种是通过代码的方式。

理解

Drawable 是“可以绘制的东西”的一般抽象。 大多数情况下,您将使用 Drawable 作为绘制事物到屏幕上的资源的类型, Drawable 类提供了一个通用的 API 来处理可能采取各种形式的底层视觉资源。 与视图不同,Drawable 没有任何接收事件或与用户交互的功能。

除了简单的绘制,Drawable 还为客户提供了一些通用的机制来与正在绘制的内容进行交互,也就是一些公共的方法。

Drawable 尽管对于应用程序通常不可见,但 Drawable 可以采用多种形式:

  • Bitmap: 最简单的 Drawable,一个 PNG 或 JPEG 图像。
  • Nine Patch: 是对 PNG 格式的扩展允许它指定如何对其进行拉伸和放置的信息
  • Vector: 向量:在 XML 文件中定义的可绘制的一组点,线和曲线以及相关的颜色信息。 这种类型的绘图可以缩放而不会损失显示质量。
  • Shape: 形状: 包含简单的绘图命令而不是原始位图,允许在某些情况下调整更好。
  • Layers: 图层:一个可绘制的复合物,它在彼此顶部绘制多个底层可绘图。
  • States: 状态,一个复合 drawable,根据其状态选择一组 drawable 中的一个。
  • Levels:级别:一个复合 drawable,根据其级别从一组 drawable 中选择一个。
  • Scale: 比例尺:一个可绘制的单个子组合可绘制的组合,其整体大小根据当前级别进行修改。

2. 官方介绍

可绘制对象资源是一般概念,是指可在屏幕上绘制的图形,以及可以使用 getDrawable(int) 等 API 检索或者应用到具有 android:drawableandroid:icon 等属性的其他 XML 资源的图形。共有多种不同类型的可绘制对象:

位图文件: 位图图形文件(.png/.jpg/.gif)。创建 BitmapDrawable。

九宫格文件: 具有可拉伸区域的 png 文件,允许根据内容调整图像大小(.9.png),创建 NinePatchDrawable。

图层列表: 管理其他可绘制对象阵列的可绘制对象。他们按照阵列顺序绘制,因此索引最大的元素绘制在顶部,创建 LayerDrawable。

状态列表: 此 xml 文件为不同状态引用不同位图图形(例如,按下按钮时使用不同的图像)。创建 StataeListDrawable。

级别列表: 此 xml 文件用于定义管理大量备选可绘制对象的可绘制对象,每个可绘制对象都分配有最大的备选数量,创建 LevelListDrawable。

转换可绘制对象: 此 xml 文件用于定义可在两种可绘制对象资源之间交错淡出的可绘制对象。创建 TransitionDrawable。

插入可绘制对象: 此 xml 文件用于定义以指定距离插入其他可绘制对象的可绘制对象,当视图需要小于视图实际边界的背景可绘制对象时,此类可绘制对象很有用。

裁剪可绘制对象: 此 xml 文件用于定义对其他可绘制对象进行裁剪(根据其当前级别值)的可绘制对象,创建 ClipDrawable。

缩放可绘制对象: 此 xml 文件用于定义更改其他可绘制对象大小(根据当前级别值)的可绘制对象,创建 ScaleDrawable。

形状可绘制对象: 此 xml 文件用于定义几何形状(根据当前级别值)的可绘制对象,创建 ShapeDrawable。