常用的Drawable有BitmapDrawable、ShapeDrawable等,现在一般加载图片都用第三方去处理,如Glide等,我们经常使用shape文件来作为View的背景来实现我们想要的效果,那么shape的语法究竟是什么样的呢?这里记录下:如下图

android drawable 样式为圆形 android的drawable类_加载图片

android drawable 样式为圆形 android的drawable类_加载图片_02

android drawable 样式为圆形 android的drawable类_android_03

Shape里面的内容都在这里了,需要注意的是<shape>标签创建的Drawable,其实体类实际上是GradientDrawable。

android:shape

表示图形的形状,有四种,reatangle(矩形)、oval(椭圆|圆形)、line(线)、ring(圆环),默认是矩形,另外line和ring这两个选项必须要通过<stroke>标签来指定线的宽度和颜色等信息,否则无法达到预期的效果。

针对ring这个形状,有5个特殊的属性:android:innerRadius、android:thickness、android:innerRadiusRatio、android:thicknessRatio和android:useLevel,它们的含义如下表:

android drawable 样式为圆形 android的drawable类_android_04

<corners>

表示shape的四个角的角度。只适用于矩形shape,这里的角度是指圆角的程度,用px来表示,有5个属性:

android drawable 样式为圆形 android的drawable类_线性渐变_05

<gradient>

它与<solid>标签是互相排斥的,其中solid表示纯色填充,而gradient则便是渐变效果,它有如下几个属性:

android:angle---渐变的角度,默认是0,其值必须是45的倍数,0表示从左到右,90表示从上到下,具体的效果自行体验,这个属性是影响渐变的方向;

android:centerX----渐变的中心点的横坐标

android:centerY----渐变中心点的纵坐标,渐变的中心点会影响渐变的具体效果;

android:startColor---渐变的起始色;

android:centerColor--渐变的中间色;

android:endColor---渐变的结束色;

android:gradientRadius---渐变半径,仅当android:type=:“radial”时有效;

android:useLevel----一般为false,当Drawable作为StateListDrawable使用时为true;

android:type----渐变类型,有linear(线性渐变)、radial(径向渐变),sweep(扫描式渐变),默认是线性渐变,三者区别如下:

android drawable 样式为圆形 android的drawable类_android_06

<solid>

这个标签表示纯色填充,通过android:color即可指定shape中填充的颜色

<stroke>

shape的描边,有如下几个属性:

android:width----描边的宽度,越大shape的边缘线看起来就越粗

android:color---描边的颜色

android:dashWidh-----组成虚线的线段的宽度

android:dashGap-----组成虚线的线段之间的间隔,间隔越大则虚线看起来空隙就越大

注意:dashwidth与dashGap任何一个为0,虚线效果不能生效

<padding>

这个表示空白,但是它表示的不是shape的空白,而是包含它的view的空白,有4个属性:android:left、android:right、android:top和android:bottom

<size>就不说了,一般我们会在xml中指定view的大小,shape的大小最后也是跟view的大小一致