Shape的基础标签共有6个:corners, gradient, solid, stroke, padding, size
Shape可以有四种形状:rectangle(矩形,默认形状),oval(椭圆形),ring(水平线),ring(环形)
关于corners标签:
corners元素只适用于rectangle!
总共有5个属性,一个总的圆角半径,或者四个角分别设置圆角半径,如果发生冲突,以该角单独设定的为准,与书写顺序无关。关于solid/gradient标签: 这两个元素均表示填充颜色,故而会产生冲突。冲突的处理原则为,二选一,按照xml中的定义顺序,谁定义在后面,就选择谁,抛弃在前面定义的
solid只有color这一个属性,即solid只能填充单一的纯色。
关于gradient
必选属性:startColor, endColor 起始颜色,终止颜色
可以设置centerColor属性,即按照某一方位可以发生两次渐变
type有3种取值,linear(线性变换,默认值), radial(径向,即像水波一样往外一圈圈扩散), sweep
当type为linear时,一般也要设置渐变角度angle,默认为0,即从左往右。这是一个整数值,且必须为45的整数倍,90即从下往上,以此类推。可以超过360。
当type为radial时,必须设置gradientRadius,即终结颜色最早出现的位置,距中心半径多少,从这一位置往外,就全是以终结颜色填充了。可选属性是centerX和centerY,是float型,取值0-1.0,默认0.5即中心位置。
当type为sweep时,只能设置起始和结束颜色,而且渐变是固定从3点钟位置开始,按照顺时针方向渐变。关于stroke标签 表示描边。共有4个属性:color, width, dashWidth, dashGap
width表示描边的粗细,边的中心以shape的长宽实际边界为准,向两边扩散。
dashWidth, dashGap表示以描边画成虚线,这两个属性必须成对出现,缺一不可,分别表示单段虚线的长度和每两段虚线的间隔。关于size标签 仅用于定义长宽,只有width和height两个属性
shape类型为ring时
注意,在Android Studio上实时展示的ring似乎有问题
一般情况下必须设置useLevel为false,否则环形无法显示。
此时相比其他形状,多了4个独有的属性(直接写在根元素):innerRadius(Radio),thickness(Radio)
当设置stroke时,内外两侧都会有描边;当设置solid/gradient时,只会填充环,内圆永远为空。shape对应于android.graphics.drawable.GradientDrawable类