直入主题,程序开发的时候回使用ShapeDrawable在drawable资源下定义,各种图形(圆,矩形等)以及它们的颜色等,这样可以让我们的按钮等比较友好的显示。
首先看看在xml文件中定义方式
1.定义各种图形
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#FFD39B"/> </shape>它的的根源元素Shape,android:shape用来声明图形的形状,它的值有oval、ring、line、rectangle.
<solid/>元素是用来申明图形单种颜色。其他的定义如下:
2.定义图形四个角的弧度
<corners android:radius="1dp" android:topLeftRadius="1dp" android:topRightRadius="1dp" android:bottomLeftRadius="1dp" android:bottomRightRadius="1dp" />
android:radius 是一次设置四个角的半径,z值越大圆角弧度越大,它与其余四个值同时存在时,它会失效不起作用,其余的四个属性分别定义对应角的弧度。
3.定义图形的内边距
<padding android:top="1dp" android:left="1dp" android:bottom="1dp" android:right="1dp" />4.设置图形的大小
<size android:width="10dp" android:dashwidth="1dp" android:dashwidth="1dp" android:dashGap="1px" />5.绘制图形的边框
<stroke android:width="10dp" android:dashwidth="1dp" android:dashGap="1px" />android:width设置边框的的宽度,android:dashwidth设置破折线的长度,android:dashGap设置破线之间的空间,为0时就会变成实线。
6.设置渐变色
<gradient android:angle="#FFFFFF" android:centerY="#FFFFFF" android:startColor="#FFFFFF" android:centerColor="#FFFFFF" android:endColor="#FFFFFF" android:gradientRadius="#FFFFFF" android:type="linear" android:useLevel="false" />android:startColor、android:centerColor、android:endColor分别为起始、中间和和结束结束颜色,android:angle设置渐变颜色的角度,android:type颜色渐变的方式,它的值有radial(径向渐变)、linear(线性渐变)、sweep默认值是 linear。
我们实现一个小例子,在drawable文件夹下定义两个xml文件rect.xml和rect_grad.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#FFD39B"/> <corners android:radius="10dp"/> <stroke android:color="#FFF0F5" android:dashGap="5px" android:dashWidth="30dp" android:width="5dp" /> </shape>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:startColor="#FF8C69" android:centerColor="#FFFF00" android:endColor="#FF7256" android:angle="45" android:type="linear" /> <padding android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp" /> </shape>最后在layout布局文件中使用我们刚才定义的两个文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:layout_width="300dp" android:layout_height="40dp" android:text="圆角矩形" android:gravity="center" android:background="@drawable/rect" /> <TextView android:layout_width="300dp" android:layout_height="40dp" android:text="颜色渐变" android:gravity="center" android:background="@drawable/rect_grad" /> </LinearLayout>布局超简单,没什么多说的,我们就是看看shape实现的效果