前言
Drawable文件是开发当中必不可少的,但之前都是只记得常用属性,没有系统的学习,今天特意做一下总结。
概述
Drawable
shape用于设置控件的自身属性的效果形状,这些效果不会因为状态的改变而改变,比如圆形,圆角,边框效果等等。
selector选择器,所以使用Selector设置的是跟状态有关的效果,比如点击时,获取焦点时,选中时等所展现的控件效果。
layer-list 用于控件效果的层叠。每一个item都可以实现独立的效果,比如shape或者selector,甚至item中也可以再包含一个layer-list。
shape
- 属性
android:shape=["rectangle" | "oval" | "line" | "ring"]
rectagle矩形,oval椭圆,line水平直线,ring环形。默认为矩形
//下面的属性只有在android:shape="ring时可用:
android:innerRadius //尺寸,内环的半径。
android:thickness //尺寸,环的厚度
android:innerRadiusRatio //浮点型,以环的宽度比率来表示内环的半径
android:thicknessRatio //浮点型,以圆环宽度的比率来表示圆环的厚度
android:useLevel //boolean值,Shape为ring属性时,android:useLevel="false"该属性须设置为false,否则无效果
android:thicknessRatio=”2”,那么圆环厚度就等于圆环的宽度除以2。
也就是说这个值设置的越大圆环就越细了。注意:这个值会被android:innerRadius覆盖。默认值是3android:innerRadiusRatio=”5”,那么内部半径就等于圆环的宽度除以5。这个值会被android:innerRadius的值覆盖。默认是9。
- 元素 gradient定义颜色渐变
<gradient
android:angle="integer" //代表渐变颜色的角度
android:centerX="float"//(0 - 1.0) //相对X的偏移位置。
android:centerY="float"//(0 - 1.0) //相对Y的渐变位置。
android:startColor="color" // 起始颜色
android:centerColor="integer" //中间颜色
android:endColor="color" //结束颜色
android:gradientRadius="float" //渐变颜色的半径.
android:type=["linear" | "radial" | "sweep"] //渐变的样式 分别为liner线性渐变 radial环形渐变 sweep 扫描渲染渐变
//注意使用android:type="radial"时需要设置gradientRadius才会有效果
android:useLevel=["true" | "false"] /> //使用LevelListDrawable时就要设置为true。设为false时才有渐变效果
angle 默认是0. 0 从左往右, 90 从下往上。180是从右往左依次类推,必须是45的整数倍.该属性只有在type=linear情况下起作用,默认的type为linear。
- 元素corners定义圆角
<corners //定义圆角
android:radius="dimension" //四个角的圆角半径
android:topLeftRadius="dimension" //左上角的圆角半径
android:topRightRadius="dimension" //右上角的圆角半径
android:bottomLeftRadius="dimension" //左下角的圆角半径
android:bottomRightRadius="dimension" /> //右下角的圆角半径
Corners标签是用来定义圆角的,其中radius与其它四个并不能共同使用。
- 元素solid设置填充颜色
<solid android:color="color"/> //设置填充的颜色
- 元素stroke设置描边
<stroke
// 设置实线
android:width="dimension" //描边宽度
android:color="color" //描边颜色
// 设置虚线
android:dashWidth="dimension" //虚线的宽度,值为0时是实线
android:dashGap="dimension" /> //虚线的间隔
设置虚线必须四个属性都写上
- 元素和
这两个基本上不怎么用,因为他们所具有的功能,控件本身也能实现,这里不做过多介绍;
<size
android:width="dimension"
android:height="dimension" />
<padding
android:left="dimension"
android:top="dimension"
android:right="dimension"
android:bottom="dimension" />
select
item属性
android:drawable="@drawable/icon" //默认状态
android:state_pressed = "boolean" //是否是按压状态
android:state_focused = "boolean"//是否取得焦点,比如用户选择了一个文本框.
android:state_hovered = "boolean" //光标是否悬停,通常与focused state相同,它是4.0的新特性.
android:state_selected = "boolean" //是否是选中状态.
android:state_checkable = "boolean" //是否"能被"选中。如:RadioButton是可以被check的。
android:state_checked = "boolean" //是否是选中状态
android:state_enabled = "boolean" //是否接受触摸或者点击事件 (控件是否可用)
android:state_activated = "boolean" //没用过,不太懂。
android:state_window_focused = "boolean" //应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了
注意:如果有多个item,那么程序将自动从上到下进行匹配,最先匹配的将得到应用。(不是通过最佳匹配)
如果一个item没有任何的状态说明,那么它将可以被任何一个状态匹配。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/android_red"
android:gravity="center" />
</item>
<item android:top="10dp" android:left="10dp">
<bitmap android:src="@drawable/android_green"
android:gravity="center" />
</item>
<item android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue"
android:gravity="center" />
</item>
</layer-list>
使用layer-list可以将多个drawable按照顺序层叠在一起显示,默认情况下,所有的item中的drawable都会自动根据它附上view的大小而进行缩放,layer-list中的item是按照顺序从下往上叠加的,即先定义的item在下面,后面的依次往上面叠放
将多个图片或上面两种效果按照顺序层叠起来
效果如图:
总结:
以上是在使用过程中对Drawable的总结,如有差错欢迎批评指正。