说明
Android开发中,我们经常会遇到需要改变某个控件的背景,或者定义某个控件的形状,这时候我们可以使用Shape帮助我们定义各种各样的形状。相比传统的使用图片资源可以减少资源占用,减少安装包大小,还能很好的适配不同尺寸的手机。
一、shape的基本属性
shape可以定义四种形状:
rectangle:矩形
oval:椭圆形
line:线行
ring:环形
同时shape通过子标签也可以定义控件的一些展示效果,如:
圆角:corners
渐变:gradient
填充:solid
描边:stroke
大小:size
边距:padding
二、shape的基本语法
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line" | "ring"] > // 定义形状
<corners //定义圆角
android:radius="10dp" //全部的圆角半径;
android:topLeftRadius="5dp" //左上角的圆角半径;
android:topRightRadius="5dp" //右上角的圆角半径;
android:bottomLeftRadius="5dp" //左下角的圆角半径;
android:bottomRightRadius="5dp" /> //右下角的圆角半径。
<gradient //渐变属性,用以定义渐变色,可以定义两色渐变和三色渐变,及渐变样式
//共有3中渐变类型,线性渐变(默认)/放射渐变/扫描式渐变;
android:type=["linear" | "radial" | "sweep"]
android:angle="90" //渐变角度,必须为45的倍数,0为从左到右,90为从上到下;
android:centerX="0.5" //渐变中心X的相当位置,范围为0~1;
android:centerY="0.5" //渐变中心Y的相当位置,范围为0~1;
android:startColor="#24e9f2" //渐变开始点的颜色;
android:centerColor="#2564ef" //渐变中间点的颜色,在开始与结束点之间;
android:endColor="#25f1ef" //渐变结束点的颜色;
android:gradientRadius="5dp" //渐变的半径,只有当渐变类型为radial时才能使用;
android:useLevel="false" /> //使用LevelListDrawable时就要设置为true。设为false时才有渐变效果。
<padding //边距属性:是用来定义内部边距
android:left="10dp" //左内边距;
android:top="10dp" //上内边距;
android:right="10dp" //右内边距;
android:bottom="10dp" /> //下内边距。
<size //大小属性:用来定义图形的大小
android:width="50dp" //宽度
android:height="50dp" />// 高度
<solid //填充属性
android:color="color" /> //内部填充色
<stroke //描边属性:可以定义描边的宽度,颜色,虚实线等
android:width="1dp" //描边的宽度
android:color="#ff0000" //描边的颜色
// 以下两个属性设置虚线
android:dashWidth="1dp" //虚线的宽度,值为0时是实线
android:dashGap="1dp" />//虚线的间隔
</shape>
特殊属性语法:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line" | "ring"] //shape的形状,默认为矩形,可以设置为矩形(rectangle)、椭圆形(oval)、线性形状(line)、环形(ring)
//下面的属性只有在android:shape="ring"时可用:
android:innerRadius="10dp" // 内环的半径;
android:innerRadiusRatio="2" // 浮点型,以环的宽度比率来表示内环的半径;
android:thickness="3dp" // 环的厚度;
android:thicknessRatio="2" // 浮点型,以环的宽度比率来表示环的厚度;
android:useLevel="false"> // boolean值,如果当做是LevelListDrawable使用时值为true,否则为false。
</shape>
三、使用
1.在res/drawable下新建shape配置文件:(名字自定义如:shape_text.xml)
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="5dp"
android:topLeftRadius="15dp"
android:topRightRadius="15dp"
android:bottomLeftRadius="15dp"
android:bottomRightRadius="15dp" />
<gradient
android:startColor="#FF0000"
android:endColor="#80FF00"
android:angle="45"/>
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp"/>
<size
android:width="200dp"
android:height="200dp"/>
<solid
android:color="#ffff9d"/>
<stroke
android:width="2dp"
android:color="#dcdcdc"/>
</shape>
2.在布局中引入shape_text.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Shape测试"
android:background="@drawable/shape_text"
android:textSize="15sp"
android:textColor="@android:color/black"/>
</LinearLayout>
下一篇继续探索每一种类型的具体使用:Android形状属性Shape的使用(二)