在开发当中一直秉承:能用xml绘制的图片效果,就一定用xml来绘制。
因为xml绘制的所占文件大小比图片小很多,一般都小于1K。
从shape,layer-list 2种方式来做整理。
shape:
shape有4种属性,分别描述4种不同的图形:ovale(圆) line:(线) rectangle:(矩形) ring: (环形)
默认为rectangle。
子标签中有gradient、corners、padding、size、solid、stroke;来对图形进行样式描述。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle / ovale / ring/ line">
<corners //角半径 shape = "rectangle" 有用
android:radius="integer"
android:topRightRadius="integer"
android:topLeftRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer"
/>
<gradient //颜色渐变
android:type="linear / radial / sweep" //渐变类型
android:startColor="color" //渐变开始点的颜色
android:centerColor="color" //渐变中间点的颜色,在开始与结束点之间
android:endColor="color" //渐变结束点的颜色
android:angle="integer" //渐变角度,必须为45的倍数,0为从左到右,90为从上到下
android:gradientRadius="float" //渐变的半径,只有当渐变类型为radial时才能使用
android:centerX="float" //渐变中心X的相当位置,范围为0~1,从左到右,默认0.5
android:centerY="float" //渐变中心Y的相当位置,范围为0~1,从上到下,默认0.5
android:useLevel="boolean" //使用LevelListDrawable时就要设置为true。设为false时才有渐变效
/>
//type = linear时,angle属性才有效;type=radial时,gradientRadius属性必须设置;type = sweep时, centerX和centerY属性才有效
<solid //填充颜色
android:color = "color"/>
<stroke //边框描述
android:color = "color"
android:width = "integer"
//边框虚线
android:dashWidth="integer" //每节虚线的长度
android:dashGap="integer" //每节虚线直接的间隙宽度
/>
<padding //内边距
android:left = "integer"
android:top = "integer"
android:right = "integer"
android:bottom = "integer"/>
<size //图片大小
android:width= "integer"
android:height= "integer"/>
</shape>
其中,< corners />子标签,用来描述图形4个角的半径,只有shape = “rectangle”即矩形是才有用。当shape = “ring” 环形时,设置下面属性
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:innerRadius="integer" //内环半径
android:thickness="integer" //环的宽度
android:useLevel="false" //boolean值,false值时,才能看见效果。
android:innerRadiusRatio="float" //浮点型,以环的宽度比例来表示内环的半径。默认是9,就是环的宽度乘以9再除以2就是内环半径的长度
android:thicknessRatio = "float" 浮点型,以环的宽度比率来表示环的厚度。>
</shape>
< gradient/>渐变时
type = linear时,angle属性才有效;当类型type为radial时,gradientRadius属性必须设置;当类型type为sweep时,centerX和centerY属性才有效
layer-list:
图层列表,多个item,先后顺序,依次层叠,实现图层效果。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/circle"/>
<item android:drawable="@drawable/btn_border"/>
</layer-list>
不足之处,多多包涵。