小编阅读后达到的成效与待加强地方:
- 对Drawable有了更加全面的认知,每种Drewable都能熟练的使用
- 待加强对自定义Drawable的了解
Drawable在Android开发中最常见的,可能大家最熟悉的就是ShapeDrawable,StateListDrawable一个状态,一形状的,其实还有几种
图像不清晰的请移步,下载原Xmind
同时以下所有类型的例子都在github上有demo可以两者结合阅读
先看下相应的demo图
BitmapDrawable
表示一张图片
语法:
属性 | 介绍 |
---|---|
android:src | 图片的id |
android:antialias | 是否图片抗锯齿功能 |
android:dither | 是否开启抖动效果 |
android:filter | 是否过滤效果 |
top | 将内部的Drawable放在容器的顶部,不改变其大小,如果为竖直裁剪,则从底部开始裁剪 |
bottom | 将内部的Drawable放在你容器的底部,不改变其大小。如为竖直裁剪,则从顶部开始裁剪 |
left | 将内部的Drawable放在容器的左边,不改变其大小。如为水平裁剪,则从右边开始后裁剪 |
right | 将内部的Drawable放在容器的右边,不改变其大小。如为竖直裁剪,则从左边开始裁剪 |
center_vertical | 将内部的Drawable放在容器的竖直中心,不改变其大小,如为竖直裁剪,那么上下同时开始裁剪 |
fill_vertical | 将内部的Drawable在竖直方向向上填充容器, 如果为竖直裁剪,那么仅当ClipDraewable的等级为0(0表示ClipDrawable被完全裁剪)时才有裁剪行为 |
center_horizontal | 使内部的Drawable在容器中水平居中,不改变它的大小,如果为水平裁剪,那么从左右两边同时开始裁剪 |
fill_horizontal | 使内部的Drawable在水平方向上填充容器,如果为水平裁剪,那么仅当ClipDrawable的等级为0时,才会有裁剪行为 |
center | 使内部的Drawable在容器中水平和竖直方向都居中,不改变其大小,如果为竖直裁剪,那么从上下同时开始裁剪;如果为水平裁剪,那么从左右同时裁剪 |
fill | 是内部的Drawable在水平和竖直方向上同时填充容器。仅当ClipDrawable的等级为0时,才能有裁剪行为 |
android:mipMap | 图像相关的处理技术,纹理映射 |
android:tileMode | 平铺模式 |
ShapeDrawable
ShapeDrawable是一种通过颜色构造的图形,既可以是纯色的图形,也可以是渐变效果图形。
语法:
相应属性解释:
属性 | 介绍 |
---|---|
android:shape | 图形的形状:rectangle(矩形),oval(椭圆),line(横线),ring(圆形),默认值矩形; |
属性 | 介绍 |
---|---|
android:innerRadius | 圆环的内半径 |
android:thickness | 圆环厚度 |
android:innerRadiusRatio | 内半径占整个Drawable宽度的比例,默认为9 |
android:thicknessRatio | 厚度占整个Drawable宽度的比例,默认为3 |
android:useLevel | 一般都是false,当在LevelListDrawable(文章后期会介绍)中使用 |
属性 | 介绍 |
---|---|
android:radius | 四个角设置相同的角度 |
android:topLeftRadius | 设置最上角的角度 |
android:topRightRadius | 设置右上角的角度 |
android:bottomLeftRadius | 设置最下角的角度 |
android:bottomRightRadius | 设置右下角的角度 |
属性 | 介绍 |
---|---|
android:angle | 渐变角度,默认为0,其值必须为45的度数,0表示从左到右,90表示从下到上 |
android:centerX | 渐变的中心点的横坐标 |
android:centerY | 渐变的中心点的纵坐标,渐变的中心点,渐变的中心点会影响渐变的具体效果 |
android:startColor | 渐变的起始色 |
android:centerColor | 渐变的中间色 |
android:endColor | 渐变的结束色 |
android:gradientRadius | 渐变半径,仅当android:type="radial"时有效 |
android:useLevel | 一般为fasle,当Drawable作为StateListDrawable(后面会有详细介绍)使用时为true |
android:type | 渐变的类别,有liner(有线性渐变),radial(径向渐变),sweep(扫描渐变),默认值为线性渐变 |
属性 | 介绍 |
---|---|
android:color | 填充的颜色 |
属性 | 介绍 |
---|---|
android:color | 填充的颜色 |
属性 | 介绍 |
---|---|
android:width | 描边的宽度 |
android:color | 描边的颜色 |
android:dashWidth | 组成虚线的线段宽度 |
android:dashGap | 组成虚线的线段之间的间隔,间隔越大则虚线之间的空隙越大 |
LayerDrawable
LayerDrawable对应的XML标签
语法:
其中android:top,android:bottom,android:left,android:right表示四周的偏移量
StateListDrawable
StateListDrawable对应
语法:
相应的属性详解:
属性 | 介绍 |
---|---|
android:constantSize | StateListDrawable的固定大小是否随着其状态的改变而改变,默认为false |
android:dither | 是否开启抖动效果,默认值为true |
android:variablePadding | StateListDrawable 的padding表示是否随着其状态的改变而改变,默认值false |
android:state_pressed | 表示按下状态 |
android:state_focused | 表示View已经获得焦点 |
android:state_selected | 表示用户选择了View |
android: state_checked | 表示用户选中了View |
android:state_enabled | 表示View当前处于可用状态 |
LevelListDrawable
LevelListDrawable对应于
语法:
maxLevel,minLevel设置等级最大最小值,会根据代码设置的相应的level切换相应的drawable
TransitionDrawable
TransitionDrawable对应于
语法:
其中android:top,android:bottom,android:left,android:right表示四周的偏移量
InsetDrawable
InsetDrawable对应
语法:
其中android:top,android:bottom,android:left,android:right表示四周的偏移量
ScaleDrawable
ScaleDrawable对应的标签为
语法:
android:scaleGravity等同于androiid:gravity,android:scaleHeight和android:scaleWidth分别表示对指定Drawable宽高的缩放比例,用百分比表示。
ClipDrawable
ClipDrawable对应于
语法:
选项 | 意义 |
---|---|
top | 将内部的Drawable放在容器的顶部,不改变其大小,如果为竖直裁剪,则从底部开始裁剪 |
bottom | 将内部的Drawable放在你容器的底部,不改变其大小。如为竖直裁剪,则从顶部开始裁剪 |
left | 将内部的Drawable放在容器的左边,不改变其大小。如为水平裁剪,则从右边开始后裁剪 |
right | 将内部的Drawable放在容器的右边,不改变其大小。如为竖直裁剪,则从左边开始裁剪 |
center_vertical | 将内部的Drawable放在容器的竖直中心,不改变其大小,如为竖直裁剪,那么上下同时开始裁剪 |
fill_vertical | 将内部的Drawable在竖直方向向上填充容器, 如果为竖直裁剪,那么仅当ClipDraewable的等级为0(0表示ClipDrawable被完全裁剪)时才有裁剪行为 |
center_horizontal | 使内部的Drawable在容器中水平居中,不改变它的大小,如果为水平裁剪,那么从左右两边同时开始裁剪 |
fill_horizontal | 使内部的Drawable在水平方向上填充容器,如果为水平裁剪,那么仅当ClipDrawable的等级为0时,才会有裁剪行为 |
center | 使内部的Drawable在容器中水平和竖直方向都居中,不改变其大小,如果为竖直裁剪,那么从上下同时开始裁剪;如果为水平裁剪,那么从左右同时裁剪 |
fill | 是内部的Drawable在水平和竖直方向上同时填充容器。仅当ClipDrawable的等级为0时,才能有裁剪行为 |
初写文章,大家请轻点喷QAQ
最后感谢刚哥的Android开发艺术探索