Android样式之Shape
来源:互联网 发布:seo 知乎 编辑:程序博客网 时间:2024/06/05 19:18
在实际开发中经常会用到自定义的形状,本文中借助网上优秀的博文,在根据自己平时所应用的,做一个系统的学习。
Learn from 开发者文档
shape是定义在xml中的一般形状(generic shape).
文件位置
res/drawable/filename.xml
filename会被作为资源的ID
资源引用
Java:R.drawable.filename
XML:@[package:]drawable/filename
语法讲解
具体语言见链接:开发者文档之Shape
shape是shape drawable的root结点
属性解释
xmlns:android
string.必须的。定义XML的命名空间,属性值为
http://schemas.android.com/apk/res/androidandroid:shape
Keyword.定义shape的类型。有效值是以下四种:有效值 描述 rectangle 矩形,默认图形,可以画出直角矩形、圆角矩形、弧形等 oval 椭圆形,可以画正圆 line 线性,可以画实线和虚线,需要stroke元素来定义线条的宽度 ring 环形,可以画环形进度条
rectangle
rectangle,shape默认的形状。一般用于文字、按钮、控件或者布局的背景。
solid:设置形状填充的颜色,只有android:color的一个属性。
- android:color填充的颜色
padding设置内容与形状边界的内间距,可分别设置左右上下的距离
gradient设置形状的渐变颜色,可以是线性渐变、辐射渐变和扫面性渐变
android:type 渐变的类型
- linear 线性渐变,默认渐变类型
- radial 放射渐变,设置该项时,android:gradientRadius也必须设置
- sweep 扫描性渐变
- android:startColor 渐变开始的颜色
- android:endColor 渐变结束的颜色
- android:centerColor 渐变中间的颜色
- android:angle 渐变的角度,线性渐变时才有效,必须是45的倍数,0表示从左到右,90表示从下到上
- android:centerX 渐变中心的相对X坐标,放射渐变时才有效,在0.0到1.0之间,默认为0.5,表示在正中间
android:centerY 渐变中心的相对X坐标,放射渐变时才有效,在0.0到1.0之间,默认为0.5,表示在正中间
corners设置圆角,只适用于rectangle类型,可分别设置四个角不同半径的圆角,当设置的圆角半径很大时,比如200dp,就可变成弧形边了。
stroke设置描边,可描成实线或者虚线
- android:color 描边的颜色
- android:width 描边的宽度
- android:dashWidth 设置虚线时的横线长度
android:dashGap 设置虚线时横线之间的距离
实例中所用到的属性如上所示,接下来显示图片中6_实线描边矩形代码。
文件命名为bg_rectangle_stroke.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/holo_blue_light" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> <corners android:radius="200dp" /> <stroke android:width="2dp" android:color="@android:color/black" android:dashGap="3dp" android:dashWidth="4dp" /></shape>
在TextView中brackground中进行引用
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5+实线描边=6" android:layout_marginBottom="10dp" android:background="@drawable/bg_rectangle_stroke"/>
oval
oval用来画椭圆的,但是在实际中,更多的是用来画正圆,比如消息提示,圆形按钮等。
上图的效果分别使用了solid,stroke,gradient,size。
其中size是用来设置形状大小的。
size设置形状默认大小,可设置宽度和高度
- android:width 宽度
- android:height 高度
上图5中的实现方式如下,文件名定义为bg_oval_with_gradient.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@android:color/holo_blue_light" /> <size android:width="60dp" android:height="60dp" /> <stroke android:width="2dp" android:color="@android:color/black" /> <gradient android:endColor="@android:color/white" android:gradientRadius="40dp" android:startColor="@android:color/holo_blue_bright" android:type="radial" /></shape>
引用的代码如下:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="10dp" android:background="@drawable/bg_oval_with_gradient" android:gravity="center" android:text="5" />
line
line主要用来画分割线,通过stroke和size的组合来实现的。实例如下所示。
虚线代码实现如下所示。文件定义如下,bg_line_dash_shape.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="1dp" android:color="@android:color/holo_blue_light" android:dashGap="2dp" android:dashWidth="4dp" /> <size android:height="3dp" /></shape>
资源代码引用如下:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/darker_gray" android:gravity="center" android:text="下面是虚线" /> <View android:layout_width="match_parent" android:layout_height="3dp" android:background="@drawable/bg_line_shape" android:layerType="software"/>
注意点如下:
- 只能画水平线,不能画竖线
- 线的高度是通过stroke的android:width属性设置的
- size的android:height属性定义的是整个形状区域的高度
- size的height必须大于stroke的width,否则线无法显示
- 线左右两边留有空白空间,线越粗,空白越大
- 引用虚线时需要添加android:layerType=”software”,否则显示的是实线。
ring
shape根元素有些属性只适用于ring类型。
- android:innerRadius 内环的半径
- android:innerRadiusRatio 浮点型,以环的宽度比率来表示内环的半径。该值会被android:innerRadius覆盖。
即环的宽度(外环的直径)除以innerRadiusRatio的值等于内环的半径。假如innerRadiusRatio为2的话,内环和外环就会重合(前提是厚度为0)。默认值为9. - android:thickness 环的厚度
- android:thicknessRatio 浮点型,以环的宽度比率表示环的厚度,默认为3,表示环的厚度为环的宽度除以thicknessRatio的值。
具体实例如下:
环1只添加了solid属性,环2添加了gradient,类型为sweep,环3添加了stroke和gradient的属性。
环3的代码如下,文件命名为bg_ring_gradient_stroke_shape.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="9" android:useLevel="false"> <stroke android:width="2dp" android:color="@android:color/black" /> <gradient android:endColor="@android:color/holo_blue_light" android:startColor="@android:color/white" android:type="sweep" /></shape>
引用资源代码如下:
<View android:layout_width="60dp" android:layout_height="60dp" android:background="@drawable/bg_ring_shape2" />
如果想把环旋变成进度条的形式,在shape外层包装一个rotate元素即可。
<?xml version="1.0" encoding="utf-8"?><rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="1080.0"><shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="9" android:useLevel="false"></shape></rotate>
代码引用如下:
<ProgressBar android:layout_width="60dp" android:layout_height="60dp" android:indeterminate="false" android:background="@drawable/bg_ring_shape_rotate" />
参考链接:
Android样式的开发:shape篇(本文大多案例来自于该链接)
开发者文档之Shape
- Android样式之Shape
- Android样式之Shape
- Android 样式开发之shape
- Android样式开发之shape
- Android-自定义控件样式之shape
- Android样式开发之shape篇
- Android样式开发之shape篇
- Android shape样式
- Android样式开发---shape
- Android样式开发 Shape
- Android学习之四样式、主题、shape、回调
- Android控件样式美化之shape的使用
- ithuangqing-Android样式开发之shape详细使用
- Android自定义Shape使EditText化身为Bootstrap 风格的 textarea (样式之Shape)
- Android shape自定义button样式
- Android shape自定义button样式
- Android样式的开发:shape
- Android样式开发--shape篇
- 常用linux命令
- Linux下USB驱动框架分析
- java内存管理
- Android使用系统自带的audioreorder和mediaplayer进行录音和播放,外加进度条的滚动!
- Linux命令--mtr----traceroute+ping
- Android样式之Shape
- BZOJ_P1497&Codevs_P1789 最大获利(最大权闭合图最小割最大流)
- 设计模式-单例
- 不可不知的:iOS开发的22个诡异技巧
- matlab2012 toolbox 曲线拟合
- Python学习手册 - 05
- Cygwin完全下载指南
- (实训第二天)内核空间与用户空间
- 23种设计模式