有时候 ,为了满足一些需求,我们要用到 shape 去定义 一些背景,shape 的用法 跟图片一样 ,可以给View设置 android:background=”@drawable/shape”, 定义的shape 文件,放在 res/shape 目录下
通常我们可以用shape 做 button 的背景选择器,也可以做切换tab 时,底部的下划线。
先看我们用shape 都可以做什么
1
2
3
4
5
6
7
8
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
gradient
android:type
=
"linear"
android:angle
=
"0"
android:endColor
=
"#F028A2"
android:startColor
=
"#2A99F3"
/>
</
shape
>
|
先看看shape 都能做什么图

shape下面 一共有6个子节点, 常用的 就只有 四个,padding 和size 一般用不到。
corners ———-圆角
gradient ———-渐变
padding ———-内容离边界距离
size ————大小
solid ———-填充颜色
stroke ———-描边
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<!-- 圆角 -->
<
corners
android:radius
=
"9dp"
android:topLeftRadius
=
"2dp"
android:topRightRadius
=
"2dp"
android:bottomLeftRadius
=
"2dp"
android:bottomRightRadius
=
"2dp"
/>
<!-- 设置圆角半径 -->
<!-- 渐变 -->
<
gradient
android:startColor
=
"@android:color/white"
android:centerColor
=
"@android:color/black"
android:endColor
=
"@android:color/black"
android:useLevel
=
"true"
android:angle
=
"45"
android:type
=
"radial"
android:centerX
=
"0"
android:centerY
=
"0"
android:gradientRadius
=
"90"
/>
<!-- 间隔 -->
<
padding
android:left
=
"2dp"
android:top
=
"2dp"
android:right
=
"2dp"
android:bottom
=
"2dp"
/>
<!-- 各方向的间隔 -->
<!-- 大小 -->
<
size
android:width
=
"50dp"
android:height
=
"50dp"
/>
<!-- 宽度和高度 -->
<!-- 填充 -->
<
solid
android:color
=
"@android:color/white"
/>
<!-- 填充的颜色 -->
<!-- 描边 -->
<
stroke
android:width
=
"2dp"
android:color
=
"@android:color/black"
android:dashWidth
=
"1dp"
android:dashGap
=
"2dp"
/>
</
shape
>
|
拿shape 做虚线,shape 设置为line , stroke 是描边属性,其中 dashGap dashWidth 两个属性彼此一起存在才生效。
dashGap :两段之间的空隙宽度、dashWidth :一段线的宽度
1
2
3
4
5
6
7
8
|
android:shape
=
"line"
>
<
stroke
android:dashGap
=
"3dp"
android:dashWidth
=
"8dp"
android:width
=
"1dp"
android:color
=
"#009999"
/>
</
shape
>
|
拿shape做渐变实线

gradient 表示渐变
angle 渐变角度,45的倍数。
startColor endColor centerColor 起 止 中 的颜色
1
2
3
4
5
6
7
8
|
<
gradient
android:type
=
"linear"
android:angle
=
"0"
android:endColor
=
"#F028A2"
android:startColor
=
"#2A99F3"
/>
</
shape
>
|
shape 做view背景选择器

这里注意 ,item 的 state_pressed=true 是选择状态,按下,另一个不设置 就是 正常状态。
solid :是填充颜色
corners:设置 四个角的弧度
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
item
android:state_pressed
=
"true"
>
android:shape
=
"rectangle"
>
<!--填充色 -->
<
solid
android:color
=
"#ffffff"
/>
<!-- 描边 -->
<!-- dashGap:- 与- 虚线之间的间隔 dashWidth: 实线的宽度width: color:-->
<!-- <stroke
android:dashGap="10dp"
android:dashWidth="5dp"
android:width="1dip"
android:color="#d3d3d3"
/> -->
<!-- 圆角 -->
<
corners
android:topRightRadius
=
"10dp"
android:bottomLeftRadius
=
"10dp"
android:topLeftRadius
=
"10dp"
android:bottomRightRadius
=
"10dp"
/>
</
shape
>
</
item
>
<
item
>
<!--shape:oval 椭圆 rectangle:方形 line:线性-->
android:shape
=
"rectangle"
>
<
gradient
android:startColor
=
"#55B4FE"
android:endColor
=
"#3d8FFB"
android:type
=
"linear"
/>
<!-- 描边 -->
<!-- <stroke
android:dashGap="10dp"
android:dashWidth="5dp"
android:width="1dip"
android:color="#d3d3d3"
/> -->
<!-- 圆角 上下左右四个角 弧度-->
<
corners
android:topRightRadius
=
"10dp"
android:bottomLeftRadius
=
"10dp"
android:topLeftRadius
=
"10dp"
android:bottomRightRadius
=
"10dp"
/>
</
shape
>
</
item
>
</
selector
>
|
shape 做矩形

android:shape=”rectangle”选为矩形
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
android:shape
=
"rectangle"
>
<!-- 渐变 -->
<
gradient
android:type
=
"linear"
android:startColor
=
"@android:color/holo_blue_bright"
android:centerColor
=
"@android:color/holo_green_dark"
android:endColor
=
"@android:color/holo_red_light"
android:useLevel
=
"true"
android:angle
=
"45"
/>
<!-- 填充 -->
<!-- <solid
android:color="@android:color/white"/>填充的颜色 -->
<!-- 描边 -->
<
stroke
android:width
=
"2dp"
android:color
=
"@android:color/black"
/>
</
shape
>
|
shape 作描边矩形 和 椭圆
这里注意shape
android:shape=”oval” 椭圆

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
android:shape
=
"rectangle"
>
<!-- 填充 -->
<
solid
android:color
=
"@android:color/holo_blue_bright"
/>
<!-- 填充的颜色 -->
<!-- 描边 -->
<
stroke
android:width
=
"2dp"
android:color
=
"@android:color/black"
android:dashWidth
=
"1dp"
android:dashGap
=
"2dp"
/>
<
corners
android:topLeftRadius
=
"20dp"
android:topRightRadius
=
"20dp"
android:bottomLeftRadius
=
"20dp"
android:bottomRightRadius
=
"20dp"
android:radius
=
"50dp"
/>
</
shape
>
|
01
02
03
04
05
06
07
08
09
10
11
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
android:shape
=
"oval"
>
<!-- 填充 -->
<
solid
android:color
=
"@android:color/holo_orange_light"
/>
<!-- 填充的颜色 -->
<!-- 描边 -->
<
stroke
android:width
=
"2dp"
android:color
=
"@android:color/black"
/>
</
shape
>
|
ShapeDemo代码: http://download.youkuaiyun.com/detail/u011733020/8880615