目录
这篇文章总结得很详细,因此摘抄于此,以便自己查询和学习。
原文如下
日常开发中,我们会遇到一些Button、Textview...等控件的背景是圆角矩形、圆形...等,和android默认的控件背景矩形不一致,此时shape的作用就体现出来了,我们可以根据shape属性画出很多我们意想不到的背景图案,下面我会把所有shape的属性都介绍一下。
shape标签:
android:shape:
rectangle: 矩形,默认的形状,可以画出直角矩形、圆角矩形、弧形等 oval: 椭圆形,用得比较多的是画正圆 line: 线形,可以画实线和虚线 ring: 环形,可以画环形进度条
android:tint:
给shape着色
android:tintMode:
着色模式
android:dither:
将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;
值为“false”时则停用抖动。
默认值为 true。
android:visible:
暂时还不清楚控制什么隐藏。
android:useLevel:
如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示。
android:thickness:
环的厚度,指内环与外环的环间距。(只适用于shape为ring)
android:thicknessRatio:
浮点型,以环的宽度比率来表示环的厚度,默认为9,表示环的厚度为环的宽度除以9,该值会被android:thickness覆盖(只适用于shape为ring)
android:innerRatio:
内环半径(只适用于shape为ring)
android:innerRadiusRatio:
浮点型,以环的宽度比率来表示内环的半径,默认为3,表示内环半径为环的宽度除以3,该值会被android:innerRadius覆盖(只适用于shape为ring)
shape下size标签:
设置shape宽高值
android:height:高度 android:width:宽度
注意事项:只有控件宽高设置成wrap_content时,此处宽高才起作用,但是起到的却是最小宽高值。也就是说,当控件宽高超过你此处指定的值时,它会变化(wrap_content!!!)
shape下solid标签:
设置形状填充颜色
android:color:指定色值
shape下padding标签:
设置内容与边界的距离
android:left:左内边距 android:top:上内边距 android:right:右内边距 android:bottom:左内边距
shape下corners标签:
设置四个角的圆角
android:radius: 四个角圆角 android:topLeftRadius: 左上角的圆角 android:topRightRadius: 右上角的圆角 android:bottomLeftRadius: 左下角的圆角 android:bottomRightRadiusleft:右下角的圆角
注意事项:radius属性值可以被其他四个属性覆盖。
shape下stroke标签:
设置shape的外边界线
android:color: 边界线的颜色 android:width: 边界线的宽度 android:dashWidth: 段虚线的宽度(可以将边界线理解成一段段线无间隔的连接) android:dashGap: 段虚线的间隔
shape下的gradient标签:设置形状渐变
android:type:渐变的类型 linear:线性渐变,默认的渐变类型 radial:放射渐变,设置该项时,必须设置android:gradientRadius渐变半径属性 sweep:扫描性渐变 android:angle:渐变的角度,线性渐变时(linear也是默认的渐变类型)才有效,必须是45的倍数,0表示从左到右,90表示从下到上 android:centerX:渐变中心的相对X坐标,放射渐变时(radial)才有效,在0.0到1.0之间,默认为0.5,表示在正中间 android:centerY:渐变中心的相对X坐标,放射渐变时(radial才有效,在0.0到1.0之间,默认为0.5,表示在正中间 android:useLevel:如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示。 android:startColor:渐变开始的颜色 android:centerColor:渐变中间的颜色 android:endColor:渐变结束的颜色 android:gradientRadius:渐变的半径,只有渐变类型为radial时才使用
至此,所有有关shape属性以及子标签的属性全部介绍完毕。
注释事项
下面让我们看一下,实际应用时候的注意事项
画虚线时,有几点特性必须要知道的:
- 只能画水平线,画不了竖线;
- 线的高度是通过stroke的android:width属性设置的;
- size的android:height属性定义的是整个形状区域的高度;(前提是控件view没有设置layout_height属性值,即为wrap_content)
- size的height必须大于stroke的width,否则,线无法显示;(与3同前提,否则就是size的height必须大于控件的height)
- 线在整个形状区域中是居中显示的;
- 线左右两边会留有空白间距,线越粗,与stroke的dashWidth的值相关。
- 引用虚线的view必须添加属性android:layerType,值设为"software",否则显示不了虚线。
画圆环时,有几点特性必须要知道的:
- 必须在shape根标签下指定shape的类型为ring。
- 默认情况下,innerRadiusRatio值为3,thicknessRatio值为9,但是这两个比率可以分别被innerRadius、thickness覆盖。
- 默认情况下,圆环内径是圆环厚度的三倍。
- 当只指定了圆环内径或者圆环厚度其中的任何一个属性时,两者之间的3倍关系都将不在存在,另一个属性仍会用默认情况下的值。(画圆环必须同时指定圆环内径和圆环厚度)
- 当同时指定了圆环内径和圆环厚度时,那么这两者默认的3倍关系将不存在了,而是按照你指定的属性值画圆环。
来源