shape有四种类型分别是rectangle 矩形,oval 椭圆,ring 环形,line 线;
下面就分不同图形来分别介绍一下各个属性
1.首先讲一下rectangle矩形
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<stroke android:width="1dp" android:dashGap="5dp" android:dashWidth="10dp"></stroke>
<corners android:radius="10dp"></corners>
<solid android:color="#ff0000"></solid>
<size android:width="50dp"
android:height="50dp"/>
</shape>
Stroke :边框标签, width边框宽度 dashGap虚线间隙 dashWidth虚线的宽度(当dash为0的时候为实线)
corners:圆角, radius四边圆角半径(另外有topLeftRadius,topRightRadius,bottomLeftRadius,bottomRightRadius 可以只设置其中的一个圆角)
:填充色
size:默认大小
渐变属性介绍(线性渐变:(linear)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<stroke android:width="1dp" ></stroke>
<corners android:radius="5dp"></corners>
<size android:width="50dp"
android:height="50dp"/>
<gradient android:type="linear" android:angle="0" android:startColor="#ff0000" android:endColor="#0000ff" ></gradient>
</shape>
gradient:表示渐变属性 type 表示渐变的样式type="linear|sweep|radial" 三种渐变模式
angle:线性渐变的方向(值为45的整数倍)0为从左往右,45:左下45度到右上,90:从下往上 ,180从右往左,以此类推
startColor:开始位置的颜色centerColor:中间位置的颜色endColor:介绍位置的渐变颜色
angle:角度如下图
2.oval椭圆
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <stroke android:width="1dp" android:dashGap="5dp" android:dashWidth="10dp"></stroke> <corners android:radius="10dp"></corners> <solid android:color="#fff"></solid> <size android:width="50dp" android:height="50dp"/> <gradient android:type="sweep" android:centerColor="#00ff00" android:startColor="#ff000000" android:endColor="#0000ff" ></gradient> </shape>
gradient:表示渐变属性 type 表示渐变的样式
type=“sweep”角度渐变
startColor:开始位置的颜色
centerColor:中间位置的颜色
endColor:介绍位置的渐变颜色
gradient:表示渐变属性 type 表示渐变的样式
type=“radial”镜像渐变
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <stroke android:width="1dp" ></stroke> <size android:width="70dp" android:height="50dp"/> <gradient android:type="radial" android:gradientRadius="25dp" android:startColor="#ff0000" android:centerColor="#fff" android:endColor="#0000ff" ></gradient> </shape>
gradientRadius:和镜像属性结合使用的也是必须要设定的属性
表示镜像半径的大小
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <stroke android:width="1dp" ></stroke> <size android:width="70dp" android:height="50dp"/> <gradient android:type="radial" android:gradientRadius="25dp" android:centerX="0.9" android:centerY="0.5" android:startColor="#ff0000" android:centerColor="#fff" android:endColor="#0000ff" ></gradient> </shape>
android:centerXFloat。渐变中心的相对X坐标,在0到1.0之间。android:centerYFloat。渐变中心的相对Y坐标,在0到1.0之间。
3.ring环形
android:shape="ring"环形图形 android:innerRadius="25dp"内环的半径。一个尺寸值(dip等等)或者一个尺寸资源。 android:innerRadiusRatio="9"Float类型。这个值表示内部环的比例,例如,如果android:innerRadiusRatio = " 5 ",那么内部的半径等于环的宽度除以5。这个值会被android:innerRadius重写。 默认值是9。( innerRaiusRatio=view的宽度/半径) android:thickness="10dp"尺寸。环的厚度,是一个尺寸值或尺寸的资源。 android:thicknessRatio="3"Float类型。厚度的比例。例如,如果android:thicknessRatio= " 2 ",然后厚度等于环的宽度除以2。这个值是被android:innerRadius重写, 默认值是3。(thickenessRatio=View的宽度/环厚度) android:useLevel="false" Boolean类型。如果用在 LevelListDrawable里,那么就是true。如果通常不出现则为false。<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:thickness="2dp" android:useLevel="false" > <gradient android:type="sweep" android:startColor="#ff0000" android:endColor="#00000000"></gradient> <size android:width="100dp" android:height="100dp"/> </shape>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="15dp" android:thickness="10dp" android:useLevel="false" > <solid android:color="#ff0000"></solid> <size android:width="100dp" android:height="100dp"/> </shape>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="30dp" android:thicknessRatio="9" android:useLevel="false" > <solid android:color="#ff0000"></solid> <size android:width="100dp" android:height="100dp"/> </shape>
4.line线
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" android:useLevel="false" > <stroke android:color="#ff0000" android:dashGap="1dp" android:dashWidth="2dp" android:width="2dp"></stroke> <size android:width="100dp" android:height="50dp"/> </shape>
备注:
shape写line虚线的时候发现4.0以上机型很多都没办法显示,后来在xml中
- android:layerType="software"
代码中可以添加:
- line.setLayerType(View.LAYER_TYPE_SOFTWARE, null);