常用的Drawable有BitmapDrawable、ShapeDrawable等,现在一般加载图片都用第三方去处理,如Glide等,我们经常使用shape文件来作为View的背景来实现我们想要的效果,那么shape的语法究竟是什么样的呢?这里记录下:如下图
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,它们的含义如下表:
<corners>
表示shape的四个角的角度。只适用于矩形shape,这里的角度是指圆角的程度,用px来表示,有5个属性:
<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(扫描式渐变),默认是线性渐变,三者区别如下:
<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的大小一致