image.png
Drawable
Drawable是一种可以在Canvas上进行绘制的抽象的概念,颜色、图片等都可以是一个Drawable。
Drawable可以通过XML定义,或者通过代码创建。
Android中Drawable是一个抽象类,每个具体的Drawable都是其子类。
简单来讲,其可以理解为:图像。
它不全是图片,通过颜色也可以构造出各种各样的图片效果,它一般就是当做View的背景使用,有两种方式,一种是通过XML,一种是通过代码的方式。
image.png
Drawable的分类
主要包括:
image.png
BitmapDrawable
表示一种图片,可以直接引用原始图片或者通过XML进行描述
例如:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@color/colorPrimary"
android:antialias="true"
android:dither="true"
android:filter="true"
android:gravity="center"
android:mipMap="false"
android:tileMode="disabled"
/>
Bitmap的属性介绍:
属性 | 作用 | 备注 |
android:src | 图片资源 | ID |
android:antialias | 图片抗锯齿-图片平滑,清晰度降低 | 应该开启 |
android:dither | 开启抖动效果-用于高质量图片在低质量屏幕上保存较好的显示效果(不会失真) | 应该开启 |
android:filter | 开启过滤-在图片尺寸拉伸和压缩时保持较好的显示效果 | 应该开启 |
android:gravity | 图片小于容器尺寸时,对图片进行定位-选项之间 | 用‘ ’来组合使用 |
android:mipMap | 纹理映射-图像处理技术 | 默认false |
android:tileMode | 平铺模式-repeat单纯重复、mirror镜面反射、clamp图片四周像素扩散 | 默认disable关闭 |
NinePatchDrawable
自动根据宽高进行缩放且不会失真
实际使用,可以直接引用图片或者通过XML描述。
实例:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@color/colorPrimary"
android:antialias="true"
android:dither="true"
android:filter="true"
android:gravity="center"
android:mipMap="false"
android:tileMode="disabled"
/>
ShapeDrawable
ShapeDrawable通过颜色构造的图形、,可以是纯色的图形,也可以是有渐变效果的图形。
shape标签创建的Drawable实体是GradientDrawable
实例:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"/>
<gradient
android:angle="45"
android:centerX="30"
android:centerY="30"
android:centerColor="@color/colorAccent"
android:endColor="@color/colorPrimary"
android:startColor="@color/colorPrimaryDark"
android:gradientRadius="20"
android:type="linear"
android:useLevel="true" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
<size
android:width="200dp"
android:height="200dp" />
<solid
android:color="@color/colorPrimary"/>
<stroke
android:width="10dp"
android:color="@color/colorAccent"
android:dashWidth="5dp"
android:dashGap="3dp"/>
</shape>
属性介绍:
属性/标签 | 作用 | 备注 |
android:shape | 图形的形状:rectangle矩形、oval椭圆、line横线、ring圆环 | corners标签对应于矩形;line和ring通过stroke指定线的宽度和颜色; ring圆环有五个特殊的shape属性 |
corners标签 | 四个角的角度 | - |
gradient标签 | 渐变效果-android:angle表示渐变角度,必须为45的倍数 | android:type指明渐变类型:linear线性,radial径向、sweep扫描 |
solid标签 | 纯色填充 | 与gradient标签排斥 |
stroke标签 | 描边 | 有描边线和虚线 |
size标签 | 表示shape的固有大小,并非最终显示的大小 | 没有时getIntrinsicWidth返回-1;能指明Drawable的固有宽高,但如果作为View背景还是会被拉伸 |