Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念。
Drawable的优点:
- 使用简单,比自定义View的成本要低
- 非图片类型的Drawable占用空间较小,利于减少apk的大小
1.简介
Drawable有很多种,表示一种图像的概念。
Drawable是一个抽象类,它是所有Drawable的基类。
Drawable的内部宽高参数比较重要,获取方法:getIntrinsicWidth() , getIntrinsicHeight()
并不是所有的Drawable都有内部的宽高;对于一张图片所形成的Drawable,它的内部宽高就是图片的宽高。
2.分类
- BitmapDrawable
表示一张图片 , 在xml种定义使用标签
属性: antialias 图片抗锯齿 ; dither 抖动效果(让高质量的照片在低质量的屏幕上显示较好的效果) ; filter 过滤 ; tileMode 平铺模式 [ repeat , mirror , clamp] - NinePatchDrawable
.9格式图片 - ShapeDrawable
属性: shape [rectangle , oval , line , ring] ; corners 四个角的角度 ; gradient 渐变 angle角度 0 : 从左到右 , 必须是45的倍数 , 90从上到下 , type : 渐变的效果 [linear , radial , sweep]; solid 填充 ; stroke 描边 - LayerDrawable
表示一种层次化的Drawable集合 - StateListDrawable
Selector,可根据不同的状态来设置不同的样式 - LevelListDrawable
表示一个Drawable集合,集合中的每个Drawable都有一个等级概念,根据不同的等级会切换为对应的Drawable。
通过minLevel , maxLevel来设置最小最大等级,在此之间会显示该Drawable。可以通过Drawable的setLevel来切换Drawable , 也可以通过ImageView的setImageLevel来切换Drawable。Drawable等级0~10k - TransitionDrawable
实现两个Drawable之间的淡入淡出 ; TransitionDrawable.startTransition() / reverseTransition() - InsetDrawable
将其他Drawable内嵌到自己当中,并在四周留出一定的间距 - ScaleDrawable
scaleGravity 对应 gravity ; scaleWidth , scaleHeight指定drawable宽和高的缩放比例,以百分比的形式表示。
注意scaledrawable受等级的影响,0表示ScaleDrawable不可见。
不能少了设置等级这一步(setLevel()) - ClipDrawable
根据当前的level来裁剪另一个drawable,裁剪的方向通过clipOrentation , gravity来共同控制 ; gravity是表示将被裁剪的图片放在哪 , 裁剪的方向与gravity方向相反;
对于ClipDrawable, 0表示完全裁剪 , 10k表示不裁剪 , 等级越大表示裁剪的区域越小;
3.自定义Drawable
必须重写draw() , setAlpha() , setColorFilter() , getOpacity()方法。
注意:自定义Drawable无法在xml文件中使用