Drawable分类

201 阅读2分钟

什么是Drawable

Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念。它种类繁多,都表示一种图像的概念。Drawable一般都是通过XML的方式来定义,也可以通过代码的方式来创建具体的Drawale对象,但是代码创建会稍显复杂。在Android设计中,Drawable是一个抽象类,是所有Drawable对象的基类,每个具体的Drawable都是它的子类。

Drawable通过getIntrinsicWidth和getIntrinsicHeight两个方法来获取Drawable内部的宽/高参数。但是不是所有的Drawable都有内部宽高。比如图片形成的Drawable有,颜色所形成的Drawable无内部宽高概念。

放一张Drawable层次图:

Drawable的分类

1、BitmapDrawable(<bitmap>标签) 表示一张图片。

2、ShapeDrawa(<shap>标签) 可以理解为通过颜色来构造的图形,可以为纯色,也可以为渐变色

3、LayerDrawable(<layer-list>标签) 表示一种层次化的Drawable集合

4、StateListDrawable(<selector>标签) 也表示一种集合,根据View的状态选择合适Drawable。常用于Button

5、LevelListDrawable(<level-list>标签) 表示一个Drawable集合,根据等级显示对应等级的Drawable

6、TransitionDrawab (<transition>标签) 用于实现两个Drawable之间的淡入淡出效果。

7、InsetDrawable(<inset>标签) 可以将其他Drawable内嵌到自己当中,并可以在四周留出一定的间距(类似于padding或margin效果)

8、ScaleDrawable(<scale>标签)

根据level来指定Drawable的缩放比例。ScaleDrawable的级别越大,内部Drawable看起来就越大;如果ScaleDrawable的XML中所定义的缩放比例越小,内部Drawable看起来就越小。

9、ClipDrawable(<clip>标签) 根据level来剪裁另一个Drawable。level为0~10000,0表示完全裁剪,即整个Drawable不可见,而10000表示不裁剪。

自定义Drawable 自定义Drawable无法在XML中使用,因此不常用。