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时,才能有裁剪行为。