Android开发笔记(七)初识Drawable

来源:互联网 发布:淘宝开店店铺描述 编辑:程序博客网 时间:2024/06/04 17:46

什么是Drawable

Android把所有显示出来的图形都抽象为Drawable(该单词意思就是“可绘制的”),这里的图形不只是图片,还包括色块、画板、背景等等。android.graphics.drawable源码目录下的drawable有十几种,博主就不一一介绍了,只说说一些常见的用法,以及容易弄错的地方。


Drawable资源目录

drawable文件放在res目录的各个drawable目录下,\res\drawable一般放的是描述性的xml文件,图片文件一般放在具体分辨率的drawable目录下。例如
drawable-ldpi里面主要放低分辨率的图片,如QVGA(240×320)
drawable-mdpi里面主要放中等分辨率的图片,如HVGA(320×480)
drawable-hdpi里面主要放高分辨率的图片,如WVGA(480×800),FWVGA(480×854)
drawable-xhdpi里面主要放加高分辨率的图片,如Nexus(720×1280)以上分辨率
drawable-xxhdpi里面主要放超高分辨率的图片,如Nexus(1080×1920)以上分辨率

基本上分辨率每加大一级,宽度和高度就要加大二分之一像素。如果各目录存在同名图片,则Android会根据手机的分辨率来分别适配对应文件夹里的图片。所以在开发APP时,为了兼容不同的手机屏幕,根据需求在不同目录存放不同大小的图片,才能达到最合适的显示效果。

比如说,我在drawable-hdpi放了一张背景图片bg.png(分辨率480×800),其他目录就没放,使用分辨率480×800的手机查看该APP是没有问题的,但是现在有一台分辨率高的手机如720×1280,在这个高分辨率手机上查看APP,就会发现背景图片有点模糊,原因是Android为了bg.png适配屏幕,把bg.png拉伸到了720×1280,拉伸的后果便是图片糊掉了。



Drawable的状态

简单的drawable都是静态的图形,现在我们让它动一下,根据不同的触摸情况来变更图形,这时就要用到Drawable的一个子类StateListDrawable。StateListDrawable是在一个xml文件中定义不同状态下呈现的图像。
下面是一个例子btn_visit_selector.xml
<?xml version="1.0" encoding="utf-8"?><selector  xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_pressed="true" android:drawable="@drawable/common_jia_selected" />    <item android:drawable="@drawable/common_jia_normal" /></selector>

该xml中关键点是state_pressed,该值为true表示按下时显示common_jia_selected图像,其余情况显示common_jia_normal图像。
常用的状态位有:
state_pressed:为true时表示按下,一般用于按钮Button,图形设置于android:background
state_checked:为true时表示勾选,一般用于单选框RadioButton、复选框CheckBox,图形设置于android:drawableLeft
state_selected:为true时表示选中,一般用于单选框RadioButton、复选框CheckBox,图形设置于android:background
state_focused:为true时表示获取焦点,一般用于文本框EditText,图形设置于android:background



6 0