图形Drawable
Android图形的基本概念和几种常见图形的使用方法,主要包括状态列表图形StateListDrawable
的定义与使用、形状图形ShapeDawable的定义与使用、九宫格图片(点九图片)的制作与适用场景等。
Android把所有显示出来的图形都抽象为Drawable(可绘制的)。这里的图形不止是图片,还包括色块、画板、背景等。
drawable文件放在res目录的drawable目录下。\res\drawable一般存放的是描述性的XML文件,图片文件一般放在具体分辨率的drawable目录下。例如:
drawable-ldpi里面存放低分辨率的图片(如240×320),现在基本没有这样的智能手机了。
drawable-mdpi里面存放中等分辨率的图片(如320×480),这样的智能手机已经很少了。
drawable-hdpi里面存放高分辨率的图片(如480×800),一般对应4英寸~4.5英寸的手机(但不绝对,同尺寸的手机有可能分辨率不同,手机分辨率就高不就低,因为分辨率低了屏幕会有模糊的感觉)。
drawable-xhdpi里面存放加高分辨率的图片(如720×1280),一般对应5英寸~5.5英寸的手机。
drawable-xxhdpi里面存放超高分辨率的图片(如1080×1920),一般对应6英寸~6.5英寸的手机。
drawable-xxxhdpi里面存放超超高分辨率的图片(如1440×2560),一般对应7英寸以上的平板电脑。
基本上,分辨率每加大一级,宽度和高度就要加大二分之一或三分之一像素。
在XML布局文件中引用drawable文件,可使用“@drawable/***”这种形式,如background属性、ImageView和ImageButton的src属性、TextView和Button的drawableTop系列属性都可以引用drawable文件。
在代码中引用drawable文件可分为两种情况:
(1)使用setBackgroundResource和setImageResource方法,可直接在参数中指定drawable文件的资源ID,例如“R.drawable.***”。
(2)使用setBackgroundDrawable、setImageDrawable和setCompoundDrawables等方法,参数是Drawable 对象,这时得先从资源文件中生成Drawable对象,示例代码如下:
// 从资源库里的图片文件apple.png获取图形对象
Drawable drawable = getResources().getDrawable(R.drawable.apple);
状态列表图形:StateListDrawable
一般drawable是静态图形,如Button按钮的背景在正常情况下是凸起的,在按下时是凹陷的,从按下到弹起的过程,用户便能知道点击了这个按钮。根据不同的触摸情况变更图形显示,这种情况会用到Drawable的一个子类StateListDrawable,该子类在XML文件中定义不同状态时呈现图形列表。
要想在项目中创建状态图形的XML文件,则需右击drawable目录,然后在右键菜单中依次选择New→Drawable resource file,即可自动生成一个空的XML文件。
StateListDrawable不仅用于Button控件,而且可以用于其他拥有不同状态的控件,取决于对StateListDrawable状态类型的定义。状态类型的取值说明如下:
state_pressed | 是否按下 | 按钮button |
state_checked | 是否勾选 | 单选框 RadioButton、复选框CheckBox |
state_focused | 是否获取焦点 | 文本编辑框EditText |
state_selected | 是否选中 | 各个控件均可 |
形状图形
还有一种常用的XML图形文件,是描述形状定义的图形—— shape图形。
形状图形的定义文件以shape元素为根节点。根节点下定义了6个节点:corners(圆角)、gradient(渐变)、padding(间隔)、size(尺寸)、solid(填充)、stroke(描边),各节点的属性值主要是长宽、半径、角度以及颜色。
1. shape
shape是XML文件的根节点,用来描述该形状图形是哪种几何图形。下面是shape节点的常用属性说明。
shape:字符串类型,图形的形状。
Rectangle | 矩形。默认值 |
Oval | 椭圆。此时corners节点会失效 |
line | 直线。此时必须设置stroke节点,不然会报错 |
Ring | 圆环 |
2. corners
corners是shape的下级节点,用来描述4个圆角的规格定义。若无corners节点,则表示没有圆角。下面是corners节点的常用属性说明。
bottomLeftRadius:像素类型,左下圆角的半径。
bottomRightRadius:像素类型,右下圆角的半径。
topLeftRadius:像素类型,左上圆角的半径。
topRightRadius:像素类型,右上圆角的半径。
radius:像素类型,圆角半径(若有上面4个圆角半径的定义,则不需要radius定义)。
3. gradient
gradient是shape的下级节点,用来描述形状内部的颜色渐变定义。若无gradient节点,则表示没有渐变 效果。下面是gradient节点的常用属性说明:
angle:整型,渐变的起始角度。为0时表示时钟的9点位置,值增大表示往逆时针方向旋转。例如,值为90表示6点位置,值为180表示3点位置,值为270表示0点/12点位置。
type:字符串类型,渐变类型。渐变类型的取值说明见表:
Linear | 线性渐变,默认值 |
Radial | 放射渐变,起始颜色就是圆心颜色 |
Sweep | 滚动渐变,即一个线段以某个端点为圆心做360度旋转 |
centerX:浮点型,圆心的X坐标。当android:type="linear"时不可用。
centerY:浮点型,圆心的Y坐标。当android:type="linear"时不可用。
gradientRadius:整型,渐变的半径。当android:type="radial"时才需要设置该属性。
centerColor:颜色类型,渐变的中间颜色。
startColor:颜色类型,渐变的起始颜色。
endColor:颜色类型,渐变的终止颜色。
useLevel:布尔类型,设置为true无渐变色、false有渐变色。
4. padding
padding:是shape的下级节点,用来描述形状图形与周围视图的间隔大小。
若无padding节点,则表示四周 不设间隔。下面是padding节点的常用属性说明:
- bottom:像素类型,与下边的间隔。
- left:像素类型,与左边的间隔。
- right:像素类型,与右边的间隔。
- top:像素类型,与上边的间隔。
- height:像素类型,图形高度。
- width:像素类型,图形宽度。
6. solid
solid是shape的下级节点,用来描述形状图形内部的填充色彩。若无solid节点,则表示无填充颜色。下 面是solid节点的常用属性说明:
- color:颜色类型,内部填充的颜色。
stroke是shape的下级节点,用来描述形状图形四周边线的规格定义。若无stroke节点,则表示不存在描边。下面是stroke节点的常用属性说明。
- color:颜色类型,描边的颜色。
- dashGap:像素类型,每段虚线之间的间隔。
- dashWidth:像素类型,每段虚线的宽度。
- width:像素类型,描边的厚度。若dashGap和dashWidth有一个值为0,则描边为实线。
在实际开发中,常用的有3个节点:corners(圆角)、solid(填充)和stroke(描边)。shape根节点的 属性一般不用设置(默认矩形就好了)。