Android学习—Shape
Shape Drawable
An XML file that defines a geometric shape, including colors and gradients.一个定义几何形状的XML文件,包括颜色和渐变。
简介
作用:XML中定义的几何形状
位置:res/drawable/文件的名称.xml
使用的方法:
Java代码中:R.drawable.文件的名称
layout中:android:background=”@drawable/文件的名称”
属性
<shape> android:shape=[“rectangle” | “oval” | “line” | “ring”]
其中,rectagle:矩形,oval:椭圆,line:水平直线,ring:环形
子元素
<corners> :指定边角的半径,简单的说,数值越大角越圆,数值越小越趋近于直角,参数为:
1. android:radius="integer"
2. android:topLeftRadius="integer" <!--左上角-->
3. android:topRightRadius="integer" <!--右上角-->
4. android:bottomLeftRadius="integer" <!--右下角-->
5. android:bottomRightRadius="integer" <!--左下角-->
android:radius直接指定4个角的半径,另外4个属性可以单独设置
<gradient> :设置颜色渐变
1. android:angle="integer" 设置渐变的角度,数值必须为45的倍数,默认为0,即从左到右渐变。当值为90时,从下到上渐变,以此类推当值为180时,从右往左渐变; 为270时从上向下渐变。
2. android:centerX="integer" 渐变的水平中心点,值为0-1.0
3. android:centerY="integer" 渐变的垂直中心点,值为0-1.0
4. android:centerColor="integer" 中心的颜色,非必须
5. android:startColor="color" 开始渐变时的颜色
6. android:endColor="color" 结束渐变时的颜色
7. android:gradientRadius="integer" 渐变的半径,仅适用于android:type="radial"时;(径向渐变需要指定半径)
8. android:type=["linear" | "radial" | "sweep"] 渐变的类型,分别为线状、中心放射状、经测试类似于雷达扫描的一种形态
9. android:usesLevel=["true" | "false"] 貌似是可以被当做level-list用的意思
<padding> :为内容或子标签设置边距,4个属性top、bottom、left、right,需要注意的是这个标签的作用是为内容与当前应用此shape的View的边距,而不是设置当前View与父元素的边距。
<size>: 设置背景大小,width和height两个属性
<solid> :只有一个属性,即color,设置整个背景的颜色,如果已经定义了渐变色,那么这个属性就无效了;
<stroke>:描边,即设置边框
1. android:width="integer" 描边的宽度
2. android:color="color" 描边的颜色
3. android:dashWidth="integer" 必须与下面的dashGap搭配使用缺一不可,也就是说可以两个属性都不用,如果用,两个都必须得用。那么这哥俩有什么作用呢?
4. 原来是可以实现边框分段的效果,前者指定每段的长度后者指定两端之间的间隙或者说距离。
5. android:dashGap="integer"
实例:
先看下面的代码:
复制到剪贴板 XML/HTML代码
<shape>
<!-- 实心 -->
<solid android:color="#ff9d77"/>
<!-- 渐变 -->
<gradient
android:startColor="#ff8c00"
android:endColor="#FFFFFF"
android:angle="270" />
<!-- 描边 -->
<stroke
android:width="2dp"
android:color="#dcdcdc" />
<!-- 圆角 -->
<corners
android:topRightRadius="20dp" 右上角
android:bottomLeftRadius="20dp" 右下角
android:topLeftRadius="1dp" 左上角
android:bottomRightRadius="0dp" 左下角
/>
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>