android开发之shape详解

转载 点击打开链接

很多时候,使用shape能够实现的效果,你用一张图片也能够实现,但问题是一张图片无论你怎么压缩,它都不可能比一个xml文件小,因此,为了获得一个高性能的手机App,我们在开发中应该遵循这样一个原则:能够用shape实现的效果尽量不使用图片来实现。


今天我们就一起来看看shape的使用。

首先,使用shape画的图形,这个xml文件的根节点是shape,如下:

 

?
1
2
<shape android:shape= "rectangle|oval|line|ring" xmlns:android= "http://schemas.android.com/apk/res/android" ><pre class = "brush:java;" ><shape></shape></pre>
</shape>

 

shape取值有四种,可以是rectangle(长方形),oval(椭圆),line(线条),ring(圆环),如果设置的话默认是长方形,只有当我们要画的图形是ring的时候,下面这几个属性才会生效:


android:innerRadius:内环的半径。android:innerRadiusRatio:内环的比例,比如这个值为2,那么内环的半径就为环半径除以2,如果设置了第一个属性,则这个属性不起作用。android:thickness:环的厚度。android:thicknessRatio:环的厚度比例,比如这个值为2,那么环的厚度就为环半径除以2,如果设置了第三个属性,则这个属性不起作用。android:useLevel:只有当我们的shape使用在LevelListDrawable中的时候,这个值为true,否则为false。

 

以上是shape节点,在shape节点中我们还可以定义其他的节点:

 

圆角:

 

?
1
<corners android:bottomleftradius= "0dp" android:bottomrightradius= "0dp" android:radius= "20dp" android:topleftradius= "20dp" android:toprightradius= "20dp" ></corners>

android:radius表示长方形四个角的半径,当然也可以每个角单独设定,后面单独设定的圆角半径会覆盖android:radius。

 

 

渐变:

 

?
1
<gradient android:angle= "90" android:centercolor= "#9ACD32" android:endcolor= "#9AC0CD" android:startcolor= "#9AFF9A" android:type= "linear" android:uselevel= "false" ></gradient>

 

 

android:angle=90表示渐变的起始位置,这个值必须为45的倍数,包括0,0表示从左往右渐变,逆时针旋转,依次是45,90,135.....,90表示从下往上渐变,270表示从上往下渐变,剩下的大家依次去推理。android:startColor=#9AFF9A,表示渐变的起始颜色android:centerColor=#9ACD32表示渐变的过渡颜色android:endColor=#9AC0CD表示渐变的结束颜色type表示渐变的类型,有三种,分别是linear(线性变化),radial(辐射渐变)以及sweep(扫描渐变)当type为radial时,我们要设置android:gradientRadius=,这个表示渐变的半径(线性渐变和扫描渐变不需要设置)

 

填充:

 

?
1
<solid android:color= "#ADFF2F" ></solid>

这个比较简单,不多说。

 

 

描边:

 

?
1
<stroke android:color= "#FFFF00" android:dashgap= "5dp" android:dashwidth= "15dp" android:width= "1dp" ></stroke>

 

android:dashWidth表示虚线的宽度android:dashGap表示虚线之间的间隔以上两个属性如果不设置则为实线

 

大小:

 

 

?
1
<size android:height= "1dp" android:width= "1dp" ></size>

这个表示该shape的大小,默认情况下,shape的大小与它所在的容器大小成正比。如果我们在ImageView中使用这个shape,那么可以通过android:scaleType=center属性来限制这种缩放。

 

当然,还有一种padding,这和我们在xml文件中用的一样,我这里就不多说了。

 

最后,基于以上几种特性,我做了以下几种效果供大家参考。



 

/


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值