一、简介
Drawable表示一种可以在Canvas上进行绘制的抽象的概念,它有很多种,常见的如颜色和图片都可以是一个Drawable。
其可以理解为:图像、它不全是图片,通过颜色也可以构造出各种各样的图片效果,它一般就是当做View的背景使用,他有两种方式,一种是通过XML,一种是通过代码的方式。
优点
- 使用简单,比自定义View的成本要低
- 非图片类型的Drawable占空间较小,不存在屏幕适配的问题。
二、Drawable 的分类
Drawable是一个抽象类,它是所有Drawable对象的基类,每个具体的Drawable都是它的子类,比如ShapeDrawable、BitmapDrawable等。
Drawable的层次关系如下:

子类说明
| No | xml标签 | Class类 | 含义 |
|---|---|---|---|
| 1 | shape | ShapeDrawable | 特定形状,模型的图样 |
| 2 | selector | StateListDrawable | 不同状态选择不同的图样 |
| 3 | layer-list | LayerDrawable | 层叠图样 |
| 4 | level-list | LevelListDrawable | 不同程度图样 |
| 5 | transition | TransitionDrawable | 渐变图样 |
| 6 | ripple | RippleDrawable | 波纹图样 |
| 7 | inset | InsetDrawable | 内嵌图样 |
| 8 | scale | ScaleDrawable | 缩放图样 |
| 9 | clip | ClipDrawable | 剪切图样 |
| 10 | rotate | RotateDrawable | 旋转图样 |
| 11 | animation-list | AnimationDrawable | 动画效果 |
| 12 | bitmap | BitmapDrawable | 图片图样 |
| 13 | nine-patch | NinePatchDrawable | .9图 |
三、自定义Drawable
通常我们没有必要去自定义Drawable,这是因为自定义的Drawable无法在XML中使用,这就降低了自定义Drawable的使用范围。
自定义Drawable主要是通过重写Drawable的draw方法来实现,例如实现图片圆角、圆形、椭圆形,可以继承BitmapDrawable,重写draw方法实现。
参考资料
《Android 开发艺术探索》
https://www.cnblogs.com/Jeely/p/11045042.html
https://blog.youkuaiyun.com/alwaysGoalong/article/details/77894409
本文介绍了Android中的Drawable概念,包括其基本概念、优点,以及各类Drawable(如ShapeDrawable、StateListDrawable等)的分类和用途。重点讲解了自定义Drawable的必要性和实现方法,并给出了相关参考资料。
2万+

被折叠的 条评论
为什么被折叠?



