什么是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"?>
<selectorxmlns: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

Android开发笔记(七)初识Drawable相关推荐

  1. Android开发笔记(九十五)自定义Drawable

    Drawable Bitmap是Android对图像的定义描述,而Drawable则是对图像的展现描述,在View视图中显示图像都是通过Drawable来实现的.其中有关Bitmap的介绍参见< ...

  2. Android开发笔记(七十七)图片缓存算法

    ImageCache 由于手机流量有限,又要加快app的运行效率,因此好的app都有做图片缓存.图片缓存说起来简单,做起来就用到很多知识点,可算是集Android技术之大全了.只要理解图片缓存的算法, ...

  3. Android开发笔记(一百七十一)使用Glide加载网络图片

    如何方便而又快速地显示网络图片,一直是安卓网络编程的热门课题,前些年图片缓存框架Picasso.Fresco等等大行其道,以至于谷歌按捺不住也开发了自己的Glide开源库.由于Android本身就是谷 ...

  4. Android开发笔记(七十三)代码混淆与反破解

    代码混淆 ProGuard是ADT自带的apk混淆器,它的用途有: 1.压缩apk包的大小,能删除无用的代码,并简化部分类名和方法名. 2.加大破解源码的难度,因为部分类名和方法名被重命名,使得程序逻 ...

  5. Android开发笔记(七十)反编译初步

    查看平台源码 查看内核源码 Android的内核源码很大,有几个G,仔细找找网上有许多下载的地方.作为普通开发者,一般不需要阅读内核源码,但一点都不了解好像也不行,因为实际开发中有时候就得会那么一点点 ...

  6. Android开发笔记(一百七十四)图像解码器ImageDecoder

    早期的Android只支持三种图像格式,分别是JPEG.PNG和GIF,虽然这三类图片都能在ImageView上显示,但对于GIF格式来说,图像视图仅能显示动图的初始画面,无法直接播放动画效果.此外, ...

  7. Android开发笔记(一百七十九)避免方法数过多的问题

    一个大规模的App工程,往往引入了数量繁多的第三方开发库,其中既有官方的Jetpack库,也有第三方厂商的开源包.有时候运行这种App会报错"Cannot fit requested cla ...

  8. Android开发笔记(一百七十八)更安全的数据仓库DataStore

    虽然SharedPreferences用起来比较方便,但是在一些特殊场景会产生问题.比如共享参数保存的数据较多时,初始化共享参数会把整个文件加载进内存,加载耗时可能导致主线程堵塞.又如调用apply方 ...

  9. Android开发笔记(一百七十七)借助FileProvider安装应用

    除了发送彩信需要文件提供器,安装应用也需要FileProvider.不单单彩信的附件图片能到媒体库中查询,应用的APK安装包也可在媒体库找到.查找安装包依然借助于内容解析器,具体的实现过程和查询图片类 ...

  10. Android开发笔记(一百七十六)借助FileProvider发送彩信

    通过系统相册固然可以获得照片的路径对象,却无法知晓更多的详细信息,例如图片名称.文件大小.文件路径等等都不知道,也就无法进行个性化的定制开发.为了把更多的文件信息开放出来,Android设计了专门的媒 ...

最新文章

  1. android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
  2. python中remove函数是什么意思,python中pop函数和remove函数有什么区别
  3. javascript对下拉列表框(select)的操作
  4. 信息学奥赛C++语言:求三位数的值
  5. 事务的隔离级别与锁的申请和释放
  6. Ant Design Switch 随机生成bool开关 代码片段
  7. Android 系统开发系列二
  8. 图像处理-图像尺寸变换
  9. 面向对象2:类和对象
  10. 产品经理面试问题及答案大全《一》
  11. H5打开APP或小程序
  12. 云计算现在好就业吗?薪资怎么样?
  13. mysql safe file priv_解决MySQL导入数据时遇到secure-file-priv的问题
  14. npm install --save-dev
  15. 雨听 | 英语学习笔记(十)~作文范文:怎样提高学生体能?
  16. 服务器占用内存高,单任务管理器查看每个程序占用都不高
  17. 爬取猫眼电影TOP100榜单
  18. 不掉帧不卡顿的游戏直播画面看起来爽爆了,求网络推流搭建方案
  19. 【毕业设计】深度学习图像语义分割算法研究与实现 - python 机器视觉
  20. element-ui table表格 增加合计行 和 表格列固定之后 滚动条无法滚动

热门文章

  1. Loj #2324. 「清华集训 2017」小 Y 和二叉树
  2. 数字信号处理2:傅里叶变换
  3. 【十四】无验证码登录配置:通过登录接口获取 token 配置全局变量
  4. linux查看虚拟化版本,4.15. 虚拟化 (机器翻译版本)
  5. 视图可以修改表数据吗_Excel-数据透视表、数据透视图
  6. dw二级联动下拉菜单插件 宋君墨_Excel实例——一级、二级、多级下拉菜单一次讲透...
  7. linux修改jdk版本无效,关于windows和linux系统更换JDK版本后,修改环境变量也无法生效的原因和解决办法...
  8. 若依后端实现pdfjs预览PDF文件
  9. Git-本地库与中央库
  10. mysql导出excel出乱码_Mysql中文乱码以及导出为sql语句和Excel问题解决方法[图文]...