免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1402 | 回复: 1
打印 上一主题 下一主题

[Android] 丨反编译教程丨Android之美化控件Shape [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-06-26 22:20:00每日论坛发贴之星
日期:2015-06-26 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-25 10:43 |只看该作者 |倒序浏览
转载自机锋论坛
前言
除了使用drawable这样的图片外,随着图片资源增多,程序也越来越大,今天我们自定义图形shape的方法。
反编译教程
  1. <shape>
  2.             <!-- 实心 -->
  3.             <solid android:color="#ff9d77"/>
  4.             <!-- 渐变 -->
  5.             <gradient
  6.                 android:startColor="#ff8c00"
  7.                 android:endColor="#FFFFFF"
  8.                 android:angle="270" />
  9.             <!-- 描边 -->
  10.             <stroke
  11.                 android:width="2dp"
  12.                 android:color="#dcdcdc" />
  13.             <!-- 圆角 -->
  14.             <corners
  15.                 android:radius="2dp" />
  16.             <padding
  17.                 android:left="10dp"
  18.                 android:top="10dp"
  19.                 android:right="10dp"
  20.                 android:bottom="10dp" />
  21.         </shape>
复制代码
solid:实心,就是填充的意思
android:color指定填充的颜色

gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

stroke:描边
android:width="2dp" 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp"
android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

corners:圆角
android:radius为角的弧度,值越大角越圆。
我们还可以把四个角设定成不同的角度,方法为:
  1. <corners
  2.         android:topRightRadius="20dp"    右上角
  3.         android:bottomLeftRadius="20dp"    右下角
  4.         android:topLeftRadius="1dp"    左上角
  5.         android:bottomRightRadius="0dp"    左下角
  6. />
复制代码
这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。

padding:间隔
这个就不用多说了,XML布局文件中经常用到。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector
  3.     xmlns:android="http://schemas.android.com/apk/res/android">
  4.     <item android:state_pressed="true" >
  5.         <shape>
  6.             <gradient
  7.                 android:startColor="#ff8c00"
  8.                 android:endColor="#FFFFFF"
  9.                 android:angle="270" />
  10.             <stroke
  11.                 android:width="2dp"
  12.                 android:color="#dcdcdc" />
  13.             <corners
  14.                 android:radius="10dp" />
  15.             <padding
  16.                 android:left="10dp"
  17.                 android:top="10dp"
  18.                 android:right="10dp"
  19.                 android:bottom="10dp" />
  20.         </shape>
  21.     </item>

  22.     <item android:state_focused="true" >
  23.         <shape>
  24.             <gradient
  25.                 android:startColor="#ffc2b7"
  26.                 android:endColor="#ffc2b7"
  27.                 android:angle="270" />
  28.             <stroke
  29.                 android:width="2dp"
  30.                 android:color="#dcdcdc" />
  31.             <corners
  32.                 android:radius="10dp" />
  33.             <padding
  34.                 android:left="10dp"
  35.                 android:top="10dp"
  36.                 android:right="10dp"
  37.                 android:bottom="10dp" />
  38.         </shape>
  39.     </item>

  40.     <item>      
  41.         <shape>
  42.             <gradient
  43.                 android:startColor="#ff9d77"
  44.                 android:endColor="#ff9d77"
  45.                 android:angle="270" />
  46.             <stroke
  47.                 android:width="2dp"
  48.                 android:color="#fad3cf" />
  49.             <corners
  50.                 android:radius="10dp" />
  51.             <padding
  52.                 android:left="10dp"
  53.                 android:top="10dp"
  54.                 android:right="10dp"
  55.                 android:bottom="10dp" />
  56.         </shape>
  57.     </item>
  58. </selector>
复制代码
以上几个item的区别主要是体现在state_pressed按下或state_focused获得焦点时,当当来判断显示什么类型,而没有state_xxx属性的item可以看作是常规状态下。
常规状态效果图:

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-07-01 17:00 |只看该作者
这个确实很有用。我在项目中使用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP