整理一下,基本只作为 知识清单 使用
学习内容:
- Drawable 的层次关系
- Drawable 分类
- 自定义 Drawable 的相关知识
Drawable 简介
Drawable 表示的是一种可以在 canvas 上进行绘制的图像的 抽象概念。实际开发中,Drawable 常被用来作为 View 的背景使用。
优点:
- 使用简单,比自定义 View 的成本低
- 非图片类型的 Drawable 占用空间较小,有利于减小 apk 的大小。
层次关系:
- Drawable 是一个抽象类,是所有 Drawable 对象的基类。
- 每个具体的 Drawable 都是它的子类,比如 ShapeDrawable,BitmapDrawable 等。
Drawable 内部宽 / 高
- 通过 getIntrinsicWidth 和 getIntrinsicHeight 两个方法获取。
- 并非所有 Drawable 都有内部宽/高(图片形成的 Drawable 内部宽/高等同于图片的宽/高,颜色形成的 Drawable 没有内部宽/高的概念)
- Drawable 的内部宽/高不等同于它的大小,一般来说,Drawable 没有大小概念,当作为 View 背景时,会被拉甚至 View 的同等大小。
Drawable 分类
1.BitmapDrawable
表示的就是一张图片,可以直接引用原始的图片,也可以通过 xml 方式描述它。
<?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>
属性说明:
- android:src:图片的资源 ID
- android:antialias:抗锯齿,牺牲清晰度使图片平滑。建议开启
- android:dither:抖动效果,当图片像素配置和手机屏幕的像素配置不一致时,开启此选项可以让高质量图片在低质量屏幕上还能保持较好的小时效果。建议开启
- android:filter:过滤效果,图片拉伸或压缩时,开启此选项可以保持较好的显示效果。建立开启
- android:gravity:当图片小于容器的尺寸时,设置此选项对图片进行定位,多个属性值可以通过 “|” 来组合使用
- android:mipMap:纹理映射,默认值为 false,日常开发中不涉及此项
- android:tileMode:平铺模式,默认为 disabled,关闭平铺模式;clamp 表示图片四周的像素扩散到周围区域;repeat 表示简单的水平和垂直方向上的平铺效果;mirror 表示一种水平和竖直方向上的镜面投影效果;另外需要注意,当开启平铺模式后, gravity 属性将被忽略。
2.ShapeDrawable
可以理解为通过颜色来构造的图形,既可以是纯色的图形,也可以是具有渐变效果的图形。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle"|"oval"|"line"|"ring"]>
<corners
android:bottomLeftRadius="integer"