在Android开发中,但凡涉及控件的的特效问题,<shape>,<selector>以及<layer-list>都是不可或缺的drawable。但是发现有同事并不了解或系统的记得一些常用的特性,经常是不知道就搜,用完又忘了……今天特意总结一下这几个。

  <shape> —— 用于设置控件的自身属性的效果形状,这些效果不会因为状态的改变而改变,比如圆形,圆角,边框效果等等。

  <selector> —— 顾名思义就是选择器,所以使用Selector设置的是跟状态有关的效果,比如点击时,获取焦点时,选中时等所展现的控件效果。

  <layer-list> —— 用于控件效果的层叠。每一个item都可以实现独立的效果,比如shape或者selector,甚至item中也可以再包含一个layer-list。

  有了总体概念,我们一一来分析各个drawable的使用格式:

  一,<shape>属性

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/holo_purple" />
<corners android:radius="20dp" />
<gradient
android:centerColor="@android:color/holo_purple"
android:endColor="@android:color/holo_blue_dark"
android:startColor="@android:color/holo_blue_light" />
</shape>

<shape>属性的设置比较中规中矩,没有什么特别好说的,只要你跟着属性设置规则走就行了。

<shape>常用属性如下:

<shape> android:shape=["rectangle" | "oval" | "line" | "ring"] 其中rectagle矩形,oval椭圆,line水平直线,ring环形
<shape>中子节点的常用属性:
  <gradient> 设置渐变
      android:startColor  起始颜色
      android:endColor  结束颜色
      android:angle  渐变角度,0从左到右,90表示从下到上,数值为45的整数倍,默认为0;
      android:type 渐变的样式 liner线性渐变 radial环形渐变 sweep
  <solid > 设置填充
      android:color  填充的颜色
  <stroke >描边
      android:width 描边的宽度
      android:color 描边的颜色
      android:dashWidth 表示'-'横线的宽度
      android:dashGap 表示'-'横线之间的距离
  <corners >圆角
      android:radius  圆角的半径 值越大角越圆
      android:topRightRadius 右上圆角半径
      android:bottomLeftRadius 右下圆角角半径
      android:topLeftRadius 左上圆角半径
      android:bottomRightRadius 左下圆角半径

  <padding >填充
      android:bottom="1.0dip"  底部填充
      android:left="1.0dip"  左边填充
      android:right="1.0dip" 右边填充
      android:top="0.0dip"  上面填充

二,<selector>属性

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<transition android:opacity="transparent" android:paddingBottom="30dp" android:paddingLeft="10dp">
<item android:drawable="@android:drawable/ic_delete" />
</transition>
</item>
<item android:state_selected="false">
<animated-rotate android:drawable="@android:drawable/dark_header" android:pivotX="30%" android:pivotY="70%" android:visible="true" />
</item>
</selector>

如上所示,selector每一个item都会有状态的设置,如果没有设置就是默认状态。而每一个item里面包含的则是对应该item状态的效果。比如上面的transition就是在点击的时候背景显示ic_delete的图片,而不点击的时候,则是一个翻转的动画,很有意思。

由于item设置比较灵活,大家直接在编辑器的xml里面边设置边学习就可以了。主要就是关注一下shape标签的各种state属性设置,那些都是设置效果生效的状态的值。

三,<layer-list>属性

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@android:color/holo_red_light" />
</shape>
</item> <item
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/background_light" />
</shape>
</item> <item>
<selector>
<item android:state_pressed="true">
<transition
android:opacity="transparent"
android:paddingBottom="30dp"
android:paddingLeft="10dp">
<item android:drawable="@android:drawable/ic_delete" />
</transition>
</item> <item android:state_selected="false">
<animated-rotate
android:drawable="@android:drawable/dark_header"
android:pivotX="30%"
android:pivotY="70%"
android:visible="true" />
</item>
</selector>
</item> </layer-list>

layer-list就更加灵活了,每一个item都是独立存在的,都可以独当一面,然后item可以包含任何的上面所说的效果设置!当然也包括layer-list自己本身。而item自身的属性中有各种left,gravity,width等属性跟我们平时在布局文件中使用的是一个意思,只是这次的对象是那些drawable图层罢了。最后要注意的是由于是层叠效果,所以后面的总是覆盖前面的。就比如上面的例子,如果把selector的属性挪到前面,那么动画就会被挡住。

结束语:纸上得来终觉浅,绝知此事要躬行~

关于shape和selector和layer-list的drawable详细说明的更多相关文章

  1. 【Android进阶学习】shape和selector的结合使用(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/732310 ...

  2. 活用shape、selector和layer-list来打造自己想要的背景效果

    活用shape.selector和layer-list来打造自己想要的背景效果 2016-04-27 13:52 281人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转 ...

  3. Android开发教程:shape和selector的结合使用

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

  4. android 开发:shape和selector和layer-list的(详细说明)

    目录(?)[+] Shape 简介 使用的方法 属性 Selector 简介 使用的方法 layer-list 简介 例子 最后   <shape>和<selector>在An ...

  5. 代码设置Shape和Selector

    开发中经常需要使用Shape和Selector,如果每个都用xml设置的话,会占用apk大小,同时命名多了也会混乱,使用代码来设置会方便很多. 需要用到2个类:GradientDrawable和Sta ...

  6. shape和selector的结合

    去掉gridview本身的点击效果:android:listSelector="@color/de_transparent": 添加两个selector,灰色的press和norm ...

  7. [Android UI] shape和selector的结合使用

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

  8. shape和selector的结合使用

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

  9. shape和selector是Android UI设计中经常用到的

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

  10. 【Android进阶学习】shape和selector的结合使用

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

随机推荐

  1. SSM初步整合一

    SSM(spring+springmvc+mybatis)初步整合一配置步骤: 步骤一.导入所需jar包 步骤二 .配置web.xml文件 <?xml version="1.0&quo ...

  2. 图论的复习/(ㄒoㄒ)/

    图论基本概念 完全图: 每对顶点之间有边并且只有唯一的一条边. 强连通分量:有向图中任意2点都联通的最大子图. 图的储存 邻接矩阵:也就是一个二维数组,a[i][j]的值代表是否相连. 适用范围: 1 ...

  3. zhudongfangyu.exe进程是360主动防御进程,用来监控电脑系统,防止电脑病毒出现并阻止病毒或木马的安全进程

    zhudongfangyu.exe进程是360主动防御进程,用来监控电脑系统,防止电脑病毒出现并阻止病毒或木马的安全进程

  4. 驱动模块和装模块的概念——Junit单元测试案例

    驱动模块是用来模拟被测试模块的上一级模块,相当于被测模块的主程序.它接收数据,将相关数据传送给被测模块,启用被测模块,并打印出相应的结果. 桩模块(Stub)是指模拟被测试的模块所调用的模块,而不是软 ...

  5. cpu中的缓存和操作系统中的缓存分别是什么?

    cpu中的缓存和操作系统中的缓存分别是什么? 在操作系统中,为了提高系统的存取速度,在地址映射机制中增加了一个小容量的联想寄存器,即块表.用来存放当前访问最频繁的少数活动页面的页数.当某用户需要存取数 ...

  6. ttk.Treeview

    TTK的目的. TreeView控件的呈现层次结构,用户可以使用鼠标动作来显示或隐藏结构的任何部分. 与术语“树”的关联是由于编程实践:树结构是一个常见的程序设计.严格地说,在一个TreeView控件 ...

  7. Appium+python自动化27-android特有的wait_activity【转载】

    本篇转自博客:上海-悠悠 前言在启动app的时候,如果直接做下一步点击操作,经常会报错,于是我们会在启动完成的时候加sleep.那么问题来了,这个sleep时间到底设置多少合适呢?设置长了,就浪费时间 ...

  8. 转载---sql之left join、right join、inner join的区别

    原文地址:http://www.cnblogs.com/pcjim/articles/799302.html sql之left join.right join.inner join的区别 left j ...

  9. 正则表达式、re、常用模块

    阅读目录 正则表达式 字符 量词 . ^ $ * + ? { } 字符集[][^] 分组 ()与 或 |[^] 转义符 \ 贪婪匹配 re 总结 正则 re 常用模块 namedtuple deque ...

  10. hdu 1364(差分约束)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12056   Accepted: 4397 Description ...