Shape Drawable Resources
1,示例
它们的代码如下:
shape_oval.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="oval"> 4 <gradient 5 android:endColor="#fa1621" 6 android:gradientRadius="50" 7 android:startColor="#f793ac" 8 android:type="sweep"/> 9 <size 10 android:width="72dp" 11 android:height="72dp"/> 12 <!--<solid android:color="#e3e3e3"/>--> 13 </shape>
shape_rectangle.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="rectangle"> 4 <gradient 5 android:endColor="#fa1621" 6 android:gradientRadius="50" 7 android:startColor="#f793ac" 8 android:type="radial"/> 9 <corners 10 android:bottomLeftRadius="5dp" 11 android:bottomRightRadius="5dp" 12 android:topLeftRadius="5dp" 13 android:topRightRadius="5dp"/> 14 <size android:width="72dp" android:height="72dp" /> 15 </shape>
shape_ring.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="ring" 4 android:thickness="2dp" 5 android:innerRadius="30dp" 6 android:useLevel="false"> 7 <!--<gradient--> 8 <!--android:endColor="#fa1621"--> 9 <!--android:gradientRadius="50"--> 10 <!--android:startColor="#f793ac"--> 11 <!--android:type="radial"/>--> 12 <!--<padding--> 13 <!--android:left="10dp"--> 14 <!--android:top="10dp"--> 15 <!--android:right="10dp"--> 16 <!--android:bottom="10dp" />--> 17 <stroke 18 android:width="1dp" 19 android:color="color" 20 android:dashWidth="1dp" 21 android:dashGap="1dp" /> 22 <solid android:color="#f8a17e" /> 23 <size android:width="72dp" android:height="72dp"/> 24 </shape>
shape_line.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="line" > 4 <!-- 显示一条虚线,破折线的宽度为 dashWith,破折线之间的空隙的宽度为 dashGap,当 dashGap=0dp 时,为实线 --> 5 <stroke 6 android:dashGap="3dp" 7 android:dashWidth="2dp" 8 android:width="1dp" 9 android:color="#777777" /> 10 11 <!-- 虚线的高度 --> 12 <size android:height="2dp" /> 13 </shape>
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="ring" 4 android:innerRadiusRatio="5555" 5 android:thicknessRatio="2" 6 android:useLevel="false"> 7 <!--android:innerRadiusRatio="5555"含义:按比值计算内圆半径,整个图形宽度/该值,就是36dp/5555=0.006480648dp--> 8 <!--android:thicknessRatio="2"含义:按比值计算外环厚度。整个图形宽度/该值 就是36dp/2 = 18dp --> 9 <solid android:color="#ff0000" /> 10 <size android:width="36dp" android:height="36dp"/> 11 </shape>
如图:
oval_circle.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="oval" > 4 <size 5 android:width="16dp" 6 android:height="60dp"/> 7 <solid android:color="#e3e3e3" /> 8 </shape>
注意,虽然shape="oval",且width=16dp,height=60dp,但是在使用的时候将控件比如imageview或textview的高宽设置成一样就是正圆。
2,语法
其中android:shape有4个类型,rectangle 矩形,oval椭圆,line线条,ring环形。
<shape>有6个子元素。<corners>圆角,<gradient>渐变颜色,<padding>内边距,<size>大小,<solid>填充,<stoke>描边。
1 <?xml version="1.0" encoding="utf-8"?> 2 <shape 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:shape=["rectangle" | "oval" | "line" | "ring"] > 5 <corners 6 android:radius="integer" 7 android:topLeftRadius="integer" 8 android:topRightRadius="integer" 9 android:bottomLeftRadius="integer" 10 android:bottomRightRadius="integer" /> 11 <gradient 12 android:angle="integer" 13 android:centerX="integer" 14 android:centerY="integer" 15 android:centerColor="integer" 16 android:endColor="color" 17 android:gradientRadius="integer" 18 android:startColor="color" 19 android:type=["linear" | "radial" | "sweep"] 20 android:useLevel=["true" | "false"] /> 21 <padding 22 android:left="integer" 23 android:top="integer" 24 android:right="integer" 25 android:bottom="integer" /> 26 <size 27 android:width="integer" 28 android:height="integer" /> 29 <solid 30 android:color="color" /> 31 <stroke 32 android:width="integer" 33 android:color="color" 34 android:dashWidth="integer" 35 android:dashGap="integer" /> 36 </shape>
3,各元素属性详解
3.1<shape>形状
属性 |
含义 |
类型 |
取值 |
备注 |
android:shape |
形状 |
枚举 |
rectagle矩形|正方形,oval椭圆|正圆, line水平直线,ring环形 |
画line时,用<stroke>定义线的高度 |
android:innerRadius |
内半径 |
尺寸 |
内圆的半径。一个尺寸值(dip等等)或者一个尺寸资源。 |
只在android:shape="ring"有效
注意,android:innerRadiusRatio 和 android:thicknessRatio 指定的都是一个被除数,比值。
|
android:thickness |
外环厚度 |
尺寸 |
外环的厚度,是一个尺寸值或尺寸的资源 |
|
android:innerRadiusRatio |
内圆半径比值 |
float |
按比值计算内圆半径,整个图形宽度/该值 例如,如果android:innerRadiusRatio="5", 则,内圆半径=整个图形宽度的宽度/5。 这个值会被android:innerRadius重写。默认值是9 见上面 ring_circle.xml |
|
android:thicknessRatio |
外环厚度比值 |
float |
按比值计算外环厚度。整个图形宽度/该值 例如,如果android:thicknessRatio="2", 则,外环厚度=整个图形宽度/2。 这个值是被android:innerRadius重写,默认值是3。 见上面 ring_circle.xml |
|
android:useLevel |
是否用作图层 |
bool |
如果用在 LevelListDrawable里,那么就是true。 如果通常不出现则为false。 |
3.2<size>大小
属性 |
含义 |
类型 |
取值 |
备注 |
android:width |
长度 |
尺寸 |
|
|
android:height |
高度 |
尺寸 |
|
|
3.3<padding>内边距
属性 |
含义 |
类型 |
取值 |
备注 |
android:left |
左边距 |
尺寸 |
|
|
android:top |
上边距 |
尺寸 |
|
|
android:right |
右边距 |
尺寸 |
|
|
android:bottom |
下边距 |
尺寸 |
|
|
3.4<corners>圆角
属性 |
含义 |
类型 |
取值 |
备注 |
android:radius |
四角的弧度 |
尺寸 |
设置0dp,无圆角 设置>1dp, 有圆角 值越大角越圆 |
只适用于rectagle |
android:topRightRadius |
右上角弧度 |
尺寸 |
||
android:bottomLeftRadius |
右下角弧度 |
尺寸 |
||
android:topLeftRadius |
左上角弧度 |
尺寸 |
||
android:bottomRightRadius |
左下角弧度 |
尺寸 |
3.5<stroke> 描边
属性 |
含义 |
类型 |
取值 |
备注 |
android:width |
描边的宽度 |
尺寸 |
|
|
android:color |
描边的颜色 |
颜色 |
|
|
android:dashWidth |
边框分段长度 |
尺寸 |
|
2属性要同时设置 |
android:dashGap |
边框分段间隙 |
尺寸 |
|
3.6<solid>填充
属性 |
含义 |
类型 |
取值 |
备注 |
android:color |
填充的颜色 |
颜色 |
|
|
3.7<gradient> 渐变颜色
属性 |
含义 |
类型 |
取值 |
android:startColor |
渐变开始颜色 |
颜色 |
|
android:centerColor |
渐变中间颜色 |
颜色 |
|
android:endColor |
渐变结束颜色 |
颜色 |
|
android:angle |
渐变角度 |
整字 |
0,默认值表示从左到右渐变90表示从下到上渐变, 取值必须是45的倍数 |
android:centerX |
渐变中心相对于x轴位置 |
小数 |
0-1.0 |
android:centerY |
渐变中心相对于y轴位置 |
小数 |
0-1.0 |
android:type |
渐变的样式 |
枚举 |
linear线性渐变radial环形渐变sweep |
android:gradientRadius |
渐变半径 |
小数 |
android:type="radial"必填 |
android:useLevel |
是否用作图层 |
布尔 |
true用于LevelListDrawable |