一、简介
二、Drawable分类
1. BitmapDrawable
表示的是一张图片,也就是位图(.png,.jpg或这.gif)。xml标签为<bitmap>
。
xml定义
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="right"
android:src="@drawable/studio"></bitmap>
这块需要注意的是gravity生效条件:
- 图片尺寸小于容器尺寸
- 该图片是普通图片,有自己确定的宽高,不能是矢量图等特殊图片
- ImageView等容器,会默认使图片填充整个布局,此时的gravity不生效
属性介绍
- android:src
图片资源,必须指定 - android:antialas
是否开启抗锯齿。开启后,图片变得平滑,但会降低一点点图片的清晰度 - android:dither
是否开启图像抖动。当高质量位图显示在低质量屏幕上时开启抖动可以保持较好的显示效果。(例如:ARGB 8888位图显示在RGB 565屏幕的) - android:filter
是否开启过滤效果。当图片的尺寸被拉伸时,开启过滤效果,可以保持较好的显示比例效果 - android:tileMode
平铺模式,有4个值。
disabled,默认值,表示关闭平铺模式。开启平铺效果后,gravity属性会无效
repeat,水平方向和竖直方向上的平铺效果
mirror,水平和竖直方向上镜像
clamp,图片四周的像素会被拉伸到整个区域 - android:gravity
位图在容器中的位置,带fill选项会改变位图大小,其他选项不会(例如: right 表示位图位于容器右侧)
如何全部采用默认属性,完全可以通过R.drawable形式直接引用原图即可
2. NinePatchDrawable
表示的是一张.9格式图片,.9图片会自动根据所需宽高进行缩放并保证不失真。xml标签为<nine-patch>
。
xml定义和BitmapDrawable完全相同,只不过引用资源为.9图片即可。
3. StateListDrawable
StateListDrawable表示Drawable集合,每个Drawable都对应View一种状态,这样系统会根据View的状态来选择合适的Drawable。xml标签为<selector>
。
xml定义
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--View处于按下状态-->
<item android:drawable="@android:color/holo_orange_dark" android:state_pressed="true"></item>
<!--上述两种之外的状态,均会采用该种状态-->
<item android:drawable="@android:color/white"></item>
</selector>
StateListDrawable
当然还有其他一些状态可以使用,例如:
- android:state_selected View处于选中状态
- android:state_enabled View 被启用
- android:state_checked View处于checked状态,例如Checkbox被选中
item查找顺序
由于有多个item,系统只会选择一条item进行设置,规则是按照从上到下的顺序查找,直到查找到第一条匹配的item。一般默认的item都应该放在selector的最后一条并且不附带任何的状态,这样上面的item均不匹配时,系统会选择默认的item。
4. LevelListDrawable
LevelListDrawable和StateListDrawable非常类似,不同的是StateListDrawable是根据状态切换图片,而LevelListDrawable是根据设置的level切换图片。其xml标签为<level-list>
。
xml定义
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@android:color/holo_orange_dark"
android:maxLevel="100"
android:minLevel="1"></item>
<item
android:drawable="@android:color/holo_red_dark"
android:maxLevel="200"
android:minLevel="101"></item>
<--匹配level为0的View,如果item中指定了level为0的drawable,那么该item不匹配任何level-->
<item android:drawable="@android:color/holo_blue_bright"></item>
</level-list>
- 如果是当做View的背景,可以通过Drawable的setLevel设置level
- 如果是ImageView使用时候,可以通过setImageLevel设置level
当设置level后,则会选择对应的item的图片。设置的代码以给Button背景设置为例
Drawable drawable = mButton.getBackground();
drawable.setLevel(150);
网友评论