shape根节点
shape标签中包含的属性
属性 参数类型 说明
android:shape rectangle、oval、line、ring 定义形状的类型,rectangle(矩形)、oval(椭圆)、line(线)、ring(圆环)默认为矩形
android:innerRadius int 圆环内圆的半径
android:innerRadiusRatio int 内半径占整个Drawable宽度的比例,默认值为9
android:thickness int 圆环的厚度
android:thicknessRatio int 厚度占整个Drawable宽度比例,默认值为3
android:useLevel boolean 设置等级,配合LevelListDrawable使用时设置,如果shape是ring的话,设置成false才能显示圆环
android:visible boolean 设置是否可见
android:dither boolean 是否抖动
android:tint color 给图片着色,这个着色要优先于solid子节点中的着色的
android:tintMode add、multiply、screen、src_atop、src_in、src_over 着色模式
子节点:
solid 填充色
表示形状的填充色,只有color一个属性:android:color
子节点:
corners 圆角
表示圆角的半径,对应有四个角的属性,和一个总体的属性
属性 参数类型 说明
android:radius int 统一设置圆角半径
android:bottomLeftRadius int 设置左下角圆角半径
android:bottomRightRadius int 设置右下角圆角半径
android:topLeftRadius int 设置左上角圆角半径
android:topRightRadius int 设置右上角圆角半径
子节点:
gradient 渐变色
表示渐变色,可以设置形状填充的颜色为渐变色
属性 参数类型 说明
android:angle int 设置旋转的角度,45的倍数
android:startColor color 颜色变化的起始值
android:endColor color 颜色变化的结束值
android:centerColor color 中间的颜色
android:centerX int 渐变中心点的横坐标
android:centerY int 渐变的中心点的纵坐标
android:gradientRadius int 渐变的梯度,当android:type=”radial”有效
android:type linear 、 radial 、 sweep 渐变类别,linear(线性)为默认值,radial(径内渐变),sweep(扫描渐变)
android:useLevel boolean 设置等级,配合LevelListDrawable使用时设置
子节点:
stroke 边框
表示边框。
属性 参数类型 说明
android:color color 边框颜色
android:width int 边框宽度
android:dashGap int 边框虚线间隙大小
android:dashWidth int 边框虚线每个小节的宽度
子节点:
size 大小
设置背景大小,width和height俩属性。一般来说这个值不是shape的最终显示大小,因为shape作为背景时会根据View的大小而填充其背景,因此Shape的大小很多时候是View的大小决定的。
子节点:
padding 内边距
表示内容或子标签边距,4个属性top、bottom、left、right,需要注意的是这个标签的作用是为内容设置与当前应用此shape的View的边距,而不是设置当前View与父元素的边距。
参考文章
https://blog.csdn.net/javazejian/article/details/52247324
https://blog.csdn.net/javazejian/article/details/52247337
http://keeganlee.me/post/android/20150830
-----------------------------------------------------------------------------------------------
android开发艺术中关于Drawable的知识点总结
Drawable介绍:Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念,它的种类很多,最常见的颜色和图片都可以是一个Drawable。在实际开发中,Drawable常被用来作为View的背景使用。Drawable一般都是通过XML来定义的,Drawable的内部宽/高这个参数比较重要,通过getIntrinsicWidth和getIntrinsicHeight这两个方法来获得它们,并不是所有的Drawable都有内部宽/高,比如一张图片所形成的Drawable,它的内部宽/高就是图片的宽/高,但是一个颜色所形成的Drawable,它就没有内部宽/高的概念。另外需要注意的是,Drawable的内部宽/高不等同于它的大小,一般来说,Drawable是没有大小概念的,当用作View的背景时,Drawable会被拉伸至View的等同大小。
1:BitmapDrawable,表示的就是一张图片
属性的具体含义如下:
antialias:是否开启图片抗锯齿功能,应该开启;
dither:是否开启抖动效果,应该开启;
filter:是否开启过滤效果,应该开启;
gravity:对图片进行定位,具体参数如下:
tileMode:平铺模式,可选值有disable(关闭平铺模式,这也是默认值),clamp(图片四周的像素会扩展到周围区域),repeat(表示水平和竖直方向上的平铺效果),mirror(一种在水平和竖直方向上的镜面投影效果);
2:NinePatchDrawable,表示的就是一张.9格式图片,.9图片可以自动地根据所需的宽/高进行相应的缩放并保证不失真
也可以使用bitmap标签中也可以使用.9图,即BitmapDrawable也可以代表一个.9格式的图片。
3:ShapeDrawable,通过颜色来构造的图像,它既可以是纯色的图形,也可以是具有渐变效果的图形,其实体类是GrandientDrawable。
具体属性介绍如下:
shape:有四个值rectangle(矩形),oval(椭圆),line(横线),ring(圆环)。默认值是矩形,另外line和ring这两个选项必须要通过<stroke>标签来指定线的宽度和颜色等信息,否则将无法达到预期的显示效果。针对ring这个形状,有5个特殊的属性,如下所示:
corners:表示shape的四个角的角度;
gradient:它与<solid>标签是互相排斥的,其中solid表示纯色填充,而gradient表示渐变效果,gradient有如下几个属性:
solid:表示纯色填充,通过android:color即可指定shape中填充的颜色;
stroke:shape的描边,有如下几个属性
注意如果android:dashWidth和android:dashGap有任何一个为0,那么虚线效果将不能生效。
4:LayerDrawable,LayerDrawable对应的xml标签是<layer-list>,它表示一种层次化的Drawable集合,通过将不同的Drawable放置在不同的层上面从而达到一种叠加后的效果。
注意:一个layer-list可以包含多个item,下面的item会覆盖上面的item
5:StateListDrawable,StateListDrawable对应于<selector>标签,它也是表示Drawable集合,每个Drawable都对应着View的一种状态,这样系统就会根据View的状态来选择合适的Drawable。StateListDrawable主要用于设置可单击的View的背景,最常见的是Button。
属性说明如下:
constantSize:StateListDrawable的固定大小是否不随着其状态的改变而改变,因为状态的改变会导致StateListDrawable切换到具体的Drawable,而不同的Drawable具有不同的固有大小。True表示StateListDrawable的固有大小保持不变,这时它的固有大小是内部所有Drawable的固有大小的最大值,false则会随着状态的改变而改变,默认值为false。
dither:是否开启抖动效果,默认值为true;
variablePadding:StateListDrawable的padding表示是否随着其状态的改变而改变,true表示会随着状态的改变而改变,false表示StateListDrawable的padding是内部所有Drawable的padding的最大值,默认值为false,不建议开启此选项。
item:表示一个具体的Drawable,其中android:drawable是一个已有Drawable的资源id,剩下的属性表示View的各种状态,每个item表示的都是一种状态下的Drawable信息。View的常见状态如下:
6:LevelListDrawable,LevelListDrawable对应于<level-list>标签,表示一个Drawable集合,集合中的每个Drawable都有一个等级(level)的概念。根据不同的等级,LevelListDrawable会切换为相应的Drawable,语法如下:
7:TransitionDrawable,TransitionDrawable对应于<transition>标签,它用于实现两个Drawable之间的淡入淡出效果,它的语法如下所示:
如果View的背景设置为TransitionDrawable的话,那么还需要通过startTransition和reverseTransition方法来实现淡入淡出的效果以及它的逆过程。示例代码如下:
8:InsetDrawable,InsetDrawable对应于<inset>标签,它可以将其他Drawable内嵌到自己当中,并可以在四周留出一定的间距。当一个View希望自己的背景比自己的实际区域小的时候,可以采用InsetDrawable来实现,通过LayerDrawable也可以实现这种效果。语法如下:
9:ScaleDrawable,ScaleDrawable对应于<scale>标签,它可以根据自己的等级(level)将指定的Drawable缩放到一定比例,语法如下所示:
在上面的属性中,android:scaleGravity的含义等同于shape中的android:gravity,而android:scaleWidth和android:scaleHeight分别表示对指定Drawable宽和高的缩放比例,以百分比的形式表示,比如25%
10:ClipDrawable,ClipDrawable对应于<clip>标签,它可以根据自己当前的等级(level)来裁剪另一个Drawable,裁剪方向可以通过android:clipOrientation和android:gravity这两个属性来共同控制,语法如下:
其中,clipOrientation表示裁剪方向,gravity比较复杂,需要和clipOrientation一起才能发挥作用,gravity的具体属性如下:
网友评论