layer-list多图层叠加效果实现圆角功能 sharp属性详解
2015-06-02 15:41
507 查看
在Android的开发过程中,我们可能会做圆角的效果出来,如下图所示:
![](http://static.oschina.net/uploads/space/2013/1014/145634_MO4j_937713.png)
四个角都是圆角的效果。如果让UI设计人员直接出图,可能会更简单一些。但是我们使用android中layer-list多图层叠加效果可以将多个图片按照顺序层叠起来,同样可以实现这个效果。
我们把它拆分为三个部分,第一个部分是最顶端的那一行(我这里称为顶部),第二部分是中间部分(中间部分不需要圆角效果),第三部分是底部。
顶部的实现:
顶部是一个有灰色边框但无下边框,带圆角,白色背景的长方体。实现效果如下:
?
中间部分是一个不带圆角 白色背景 灰色边框 无下边框 长方体.实现效果如下:
?
底部是一个具有底部圆角,白色背景,灰色边框的长方体,实现效果如下:
shape用于设定形状,可以在selector,layout等里面使用,有6个子标签,各属性如下:
填充:设置填充的颜色
间隔:设置四个方向上的间隔
大小:设置大小
圆角:同时设置五个属性,则Radius属性无效
android:Radius="20dp" 设置四个角的半径
android:topLeftRadius="20dp" 设置左上角的半径
android:topRightRadius="20dp" 设置右上角的半径
android:bottomLeftRadius="20dp" 设置右下角的半径
android:bottomRightRadius="20dp" 设置左下角的半径
描边:dashWidth和dashGap属性,只要其中一个设置为0dp,则边框为实线边框
android:width="20dp" 设置边边的宽度
android:color="@android:color/black" 设置边边的颜色
android:dashWidth="2dp" 设置虚线的宽度
android:dashGap="20dp" 设置虚线的间隔宽度
渐变:当设置填充颜色后,无渐变效果。angle的值必须是45的倍数(包括0),仅在type="linear"有效,不然会报错。android:useLevel 这个属性不知道有什么用。
angle对应值的起点如图:
![](http://images.cnblogs.com/cnblogs_com/cyanfei/201207/201207271623578045.jpg)
下面的代码可以实现一个带圆角的边框:
?
![](http://static.oschina.net/uploads/space/2013/1014/145634_MO4j_937713.png)
四个角都是圆角的效果。如果让UI设计人员直接出图,可能会更简单一些。但是我们使用android中layer-list多图层叠加效果可以将多个图片按照顺序层叠起来,同样可以实现这个效果。
我们把它拆分为三个部分,第一个部分是最顶端的那一行(我这里称为顶部),第二部分是中间部分(中间部分不需要圆角效果),第三部分是底部。
顶部的实现:
顶部是一个有灰色边框但无下边框,带圆角,白色背景的长方体。实现效果如下:
<span style="font-family:SimSun;font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item > <shape> <solid android:color="#FFFFFF" /> <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" android:bottomRightRadius="0.1dp" android:bottomLeftRadius="0.1dp" /> <stroke android:width="1dp" android:color="#ffa8abad" /> </shape> </item> <item android:top="1dp" android:left="1dp" android:right="1dp"> <shape> <solid android:color="#FFFFFF" /> <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" android:bottomRightRadius="0.1dp" android:bottomLeftRadius="0.1dp" /> <stroke android:width="1dp" android:color="#ffffffff" /> </shape> </item> </layer-list></span>
?
中间部分是一个不带圆角 白色背景 灰色边框 无下边框 长方体.实现效果如下:
<span style="font-family:SimSun;font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape> <solid android:color="#FFFFFF" /> <stroke android:width="1dp" android:color="#ffa8abad" /> </shape> </item> <item android:left="1dp" android:right="1dp" android:top="1dp"> <shape> <solid android:color="#FFFFFF" /> <stroke android:width="1dp" android:color="#ffffffff" /> </shape> </item> </layer-list></span>
?
底部是一个具有底部圆角,白色背景,灰色边框的长方体,实现效果如下:
<span style="font-family:SimSun;font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <solid android:color="#FFFFFF" /> <corners android:topLeftRadius="0.1dp" android:topRightRadius="0.1dp" android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" /> <stroke android:width="1dp" android:color="#ffa8abad" /> </shape> </item> <item android:top="1dp" android:bottom="1dp" android:left="1dp" android:right="1dp"> <shape> <solid android:color="#FFFFFF" /> <corners android:topLeftRadius="0.1dp" android:topRightRadius="0.1dp" android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" /> <stroke android:width="1dp" android:color="#ffffffff" /> </shape> </item> </layer-list></span>
shape用于设定形状,可以在selector,layout等里面使用,有6个子标签,各属性如下:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 圆角 --> <corners android:radius="9dp" android:topLeftRadius="2dp" android:topRightRadius="2dp" android:bottomLeftRadius="2dp" android:bottomRightRadius="2dp"/><!-- 设置圆角半径 --> <!-- 渐变 --> <gradient android:startColor="@android:color/white" android:centerColor="@android:color/black" android:endColor="@android:color/black" android:useLevel="true" android:angle="45" android:type="radial" android:centerX="0" android:centerY="0" android:gradientRadius="90"/> <!-- 间隔 --> <padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp"/><!-- 各方向的间隔 --> <!-- 大小 --> <size android:width="50dp" android:height="50dp"/><!-- 宽度和高度 --> <!-- 填充 --> <solid android:color="@android:color/white"/><!-- 填充的颜色 --> <!-- 描边 --> <stroke android:width="2dp" android:color="@android:color/black" android:dashWidth="1dp" android:dashGap="2dp"/> </shape>
填充:设置填充的颜色
间隔:设置四个方向上的间隔
大小:设置大小
圆角:同时设置五个属性,则Radius属性无效
android:Radius="20dp" 设置四个角的半径
android:topLeftRadius="20dp" 设置左上角的半径
android:topRightRadius="20dp" 设置右上角的半径
android:bottomLeftRadius="20dp" 设置右下角的半径
android:bottomRightRadius="20dp" 设置左下角的半径
描边:dashWidth和dashGap属性,只要其中一个设置为0dp,则边框为实线边框
android:width="20dp" 设置边边的宽度
android:color="@android:color/black" 设置边边的颜色
android:dashWidth="2dp" 设置虚线的宽度
android:dashGap="20dp" 设置虚线的间隔宽度
渐变:当设置填充颜色后,无渐变效果。angle的值必须是45的倍数(包括0),仅在type="linear"有效,不然会报错。android:useLevel 这个属性不知道有什么用。
angle对应值的起点如图:
![](http://images.cnblogs.com/cnblogs_com/cyanfei/201207/201207271623578045.jpg)
下面的代码可以实现一个带圆角的边框:
<?xml version="1.0" encoding="utf-8"?> <!-- 将多个图片或效果按照顺序层叠起来 --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <stroke android:width="1px" android:color="#FF00FF00" /> <!--边框颜色--> <solid android:color="#00FCFCFC" /> <!--填充色 透明--> <corners android:radius="4dp" /> <!-- 圆角 --> </shape> </item> </layer-list>
?
相关文章推荐
- PL/SQL:使用pragma restrict_references限制包权限
- 【RAC】rac环境下的数据库备份与还原
- Linux Kernel: What is the major difference between the buffer cache and the page cache?
- Android初学者冷知识
- Java简单实现Socket非阻塞通信
- android Button美化
- 关闭VS的实时调试器
- Mysql 中view创建
- DSP学习第六篇——Flash 的使用
- 将多个war包打成ear包部署was
- 安装oracle(版本:11G)
- Picasso
- mysql 5.6 升级5.7
- 关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)
- sed&awk
- 运维自动化之批量部署(cobbler)的使用
- poi实现单元格中部分字体颜色设定问题
- python greenlet
- 大数据 Big Data & 数据挖掘 Data Mining
- 一致性hash算法释义