Drawable
分类:
1. BitmapDrawable
2. ShapeDrawable
3. LayerDrawable
4. StateListDrawable
5. LevelListDrawable
6. TransitionDrawable
7. InsetDrawable
8. ScaleDrawable
9. ClipDrawabe
BitmapDrawable
表示的就是一张图片,可以直接引用最原始的图片,也可以通过XML来描述,对应的是 <bitmap> 标签。
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:antialias="true"
android:dither="true"
android:filter="true"
android:gravity="fill"
android:mipMap="true"
android:tileMode="clamp"
android:src="@mipmap/ic_launcher"/>
| 属性 | 描述 |
|---|---|
android:src |
resId |
android:antialias |
开启抗锯齿功能,让图片变平滑,一定程度降低图片清晰度,但是可以忽略不计,一般都开启。 |
android:dither |
是否开启抖动效果。当图片的像素配置和手机屏幕的像素配置不一致的时候,开启选项可以让高质量的图片在低质量的屏幕上保持较好的效果,图片不会过于失真。 在Android中创建BitMap一般会选择ARGB_8888模式,即ARGB 4个通道各占8位,这种色彩模式下,一个像素所占的大小为4个字节,一个像素的位数总和越高,图像也就越逼真。一般都开启 |
android:filter |
是否开启过滤效果,当图片尺寸被拉伸或者被压缩时,开启过滤效果可以保持较好的显示效果。 |
android:mipMap |
图片相关处理技术,纹理映射,使用不多。 |
android:gravity |
当图片小于容器的尺寸时,此选项对图片进行定位,不同的选项可以用分隔符组合使用。 = “ top / bottom / left / right “: 图片放在容器顶/底/左/右部,不改变图大小= “ center / center_vertical / center_horizontal “: 图片在水平和垂直 / 竖直 / 水平 方向居中,不改变大小= “ fill “: 图片在水平和竖直方向填充容器,这就是默认值 = “ fill_vertical / fill_horizontal “: 图片竖直 / 水平方向填充容器 = “ clip_vertical / clip_horizontal “: 竖直 / 水平方向的裁剪,较少使用 |
android:tileMode |
平铺模式,默认disable关闭状态 =” disable“: 关闭平铺=” clamp“: 将图片四周的像素扩展到周围区域=” repeat“: 重复平铺=” mirror“: 镜像平铺 |
ShapeDrawable
实体类对应的是GradientDrawable。
LayerDrawable
LayerDrawable对应的XML标签是<layer-list>,表示一种把不同的Drawable摆放在不同层次显示一种叠加效果。一个layer-list可以包含多个<item>标签,每一个<item>代表显示一层Drawable。一个<item>的结构比较简单,常用的属性有android:top/left/right/bottom,分别表示在该位置的偏移量,单位为像素。
还可以通过Drawable来引用一个已经存在的Drawable资源或者图片。也可以自定义Drawable。默认情况,layer-list中所有的Drawable都会被缩放至View的大小,对于bitmap来说,通过gravity来控制图片的显示效果。
StateListDrawable
StateListDrawable对应的是<selector>标签。默认的item一般放在最后并且不添加任何状态,这样当系统在之前的item无法选择的时候,就会匹配默认的item,因为item的默认状态不附带任何状态,所以它可以适配任何状态。
1 | <selector xmlns:android="http://schemas.android.com/apk/res/android" |
| 属性 | define |
|---|---|
android:constantSize |
StateListDrawable的固有大小是否不随着其状态的改变而改变。不同的 drawable存在不同的大小,true表示固有大小不变,false则会随着状态的改变而改变。 |
android:dither |
是否开启抖动效果,为了获取最好的显示效果。默认值为true。 |
android:variablePadding |
StateListDrawable的padding表示是否随着其状态的改变而改变,true表示会随着状态改变而改变,false表示内部所有Drawable的padding的最大值。默认值false,不建议修改此选项。 |
LevelListDrawable
用于多种情况设置不同图片,对应于xml文件中的<level-list>标签。通过minLevel和maxLevel来设置等级,0~10000之间
1 | <level-list xmlns:Android="http://schemas.android.com/apk/res/android"> |
使用方法:
imageView.getDrawable().setImageLevel(1);
TransitionDrawable
TransitionDrawable对应标签,transition是过渡,转变的意思, 对应于andnorid中的淡入淡出效果
1 |
|
拓展:
Android Transition Framwork 主要用来做三件事:
1. Activity间的转场动画;
2. 不同Activity或Fragment间元素共享,让交互更连贯;
3. 同一个Activity之间一些View的变换动画。
参见:http://www.jianshu.com/p/0af52be90ae6
InsetDrawable
insetDrawable对应标签<inset>,它可将其他Drawable内嵌到自己当中,适用于当一个view希望自己的背景比自己小的情况.4个属性分别代表上下左右内凹的间距.
1 |
|
ScaleDrawable
ScaleDrawable对应于xml文件中的<scale>标签,可以根据自己的level将指定的drawable缩放到一定比例。
1 | <scale xmlns:android="http://schemas.android.com/apk/res/android" |
| 属性 | define |
|---|---|
android:scaleGravity |
相当于gravity属性,缩放之后的效果。 |
android:scaleHeight/scaleWidth |
表示Drawable的缩放比例,20%就是缩放为原来的80% |
android:level |
0 < level <= 10000,级别越大,drawable 显示越大,10000时没有缩放效果 |
ClipDrawabe
ClipDrawabe对应于<clip>标签,他可以根据自己当前的等级(level)来裁剪一个Drawable,裁剪方向可以通过android:clipOrientation和android:gravity两个属性共同控制。
1 | <clip xmlns:android="http://schemas.android.com/apk/res/android" |
- top:将内部的Drawable放在容器的顶部,不改变大小,如果为竖直裁剪,就从底部开始裁剪。
- bottom:将内部的Drawable放在容器的底部,不改变大小,如果为竖直裁剪,就从顶部开始裁剪。
- left:默认值。内部Drawable放在容器左边,不改变大小,如果为水平裁剪,就从右边开始裁剪。
- right:内部Drawable放在容器右边,不改变大小,如果为水平裁剪,就从左边开始裁剪。
- center_vertical:Drawable在容器中竖直居中,不改变大小,竖直裁剪的时候上下同时开始裁剪。
- center_horizontal:Drawable水平居中,不改变大小,水平裁剪的时候从左右两边开始裁剪。
- center:Drawable在水平和竖直方向居中,不改变大小,水平裁剪的时候从左右开始裁剪,竖直裁剪的时候从上下开始裁剪。
- fill:Drawable在竖直和水平方向填充容器,仅当level=0的时候才有裁剪行为。
- clip_vertical:附加选项,竖直方向的裁剪,少使用。
- clip_horizontal:附加选项,水平方向的裁剪,少使用。
- fill_vertical:Drawable在竖直方向填充,如果为竖直裁剪,仅当ClipDrawable的等级为0时(level=0,完全不可见),才会有裁剪行为。
- fill_horizontal:Drawable在水平方向填充,如果为水平裁剪,仅当ClipDrawable等级为0时,才能有裁剪行为。