4.0后,新建android工程,会自动生成drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi六个文件夹,除drawable外,其他5个文件夹对应四种级别的density:120dip(low),160dip(medium),240dip(high),320dip(xhigh),480dip(drawable-xxhdpi)。目前主流做法都是把图片文件放在drawable-hdpi文件夹内,和图片相关的xml文件(如按钮xml,用以在按钮点击时显示不同的背景图片效果)放在drawable文件夹内。

所谓density,是指屏幕上的像素密度,以160dip为标准密度。举例来说,当我们在布局文件layout.xml中放置一个View

  <View
android:layout_height="1dip"
android:layout_width="100dip"/>

该View在密度为160dip的屏幕上显示的长度为100px(像素)长,而在320dip的屏幕上它的长度将为200px。

而当图片处于drawable文件夹内时,也需要做这种转换。假如在drawable-mdpi的文件夹内有一张22*44的图片,通过程序将其读入系统中时,假设屏幕密度为320dip,那它在内存中的大小将是44*88。

前面说过,目前主流做法是将图片放置在drawable-hdpi文件夹内,该文件夹对应的density是240dip,但其实现在的手机一般都是320dip甚至480dip了,所以放置在hdpi文件夹内的图片在显示时都是已经自动拉伸过了。

还有个问题,当直接读取sd卡或assert文件夹内的图片时,图片的大小是怎么样的呢?当我们读取sd卡内的图片时,我们首先获取的不是drawbale对象而是个bitmap对象,该bitmap对象的width和height对应的是图片的真实像素大小。而将bitmap对象转换为drawable时,除非我们手动设置了目标density,否则不进行缩放。

BitmapDrawable bmpDrawable = new BitmapDrawable(bitmap);

使用这个构造函数,默认的density是160,该构造函数已经被摒弃了,推荐使用下一个

BitmapDrawable bmpDrawable = new BitmapDrawable(getResources(),bitmap);

该构造函数会通过getResources获取到手机的density,将其设置为默认的density。

getResources().getDisplayMetrics().densityDpi

若我们需要进行缩放,可以通过下述方法设置目标density。

bmpDrawable.setTargetDensity()

在320dip长度的屏幕上,该bmpDrawable将会缩小为一半。

注:我原先以为 new BitmapDrawable(getResources(),bitmap)这个构造函数是为了将图片根据当前屏幕密度进行缩放。如屏幕密度为320dip时,在用了该构造函数后图片会自动放大1倍(Bitmap对象默认的density是160),但认真看了源码后发现,该方式是为了修改默认的density,即将160改为了320,之后再通过setTargetDensity方法设置真正需要缩放的密度。关于这点我实在想不到它的应用场景,感觉很不合理。

Android:不同drawable文件夹的区别的更多相关文章

  1. mipmap和drawable文件夹的区别

    在Android上创建工程,会默认创建mipmap文件夹.之前在Eclipse上创建的是drawable的文件夹.那么这两个有什么区别呢? 问题: I'm working with android s ...

  2. Android assets res 文件夹的区别

    大家都知道建立一个Android项目后会产生assets与res的两个文件夹,理论上他们都是存放资源的文件夹,那么他们到底有什么区别呢? 1.assets:不会在R.java文件下生成相应的标记,存放 ...

  3. Android学习笔记之Drawable 文件夹

    PS:最近闲着无聊..模仿去写个QQapp..效果还不错..并且从中又学习到了一些相关的东西,在这里进行一些相关总结.. 学习内容: Android 中 Drawable 文件夹内部相关属性..   ...

  4. 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析

    原文:关于Android中图片大小.内存占用与drawable文件夹关系的研究与分析 相关: Android drawable微技巧,你所不知道的drawable的那些细节 经常会有朋友问我这个问题: ...

  5. Android 适配(drawable文件夹)图片适配(二)

    参考自(https://blog.csdn.net/myoungmeng/article/details/54090891) Android资源文件存放: android的drawable文件一共可以 ...

  6. Android Studio 复制粘贴图片到drawable文件夹没有效果 - 解决方法

    我想放一些图片到drawable文件夹里面,但是简单的复制文件,粘贴文件,或者拖拽文件,都不起作用.不知道为什么,之前是可以的,突然就不行了. 解决方案 在drawable文件夹的目录上右键,选择Re ...

  7. Android 项目中文件夹的说明与作用(转)

    (转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. ...

  8. Android res资源文件夹的知识积累

    Android的开发框架耦合性还是比较低的,逻辑和布局被原生分开了.在Eclipse一般代码写在src文件夹下,资源等写在res文件夹下. drawable文件夹:该文件夹有很多变种,主要是为了适配A ...

  9. AndroidStudio 新建不同的Drawable文件夹

    以前习惯eclipse开发Android的朋友们知道 新创建一个Android项目的时候eclipse会自动生成多个drawable文件夹来存放图片 但是Android Studio 新建项目的时候只 ...

随机推荐

  1. spring framework各个版本下载网址

    spring framework各个版本下载网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/

  2. [Linux] 虚拟环境的配置和使用 virtualenv

    1.安装 sudo apt-get install python-virtualenv 2.使用 创建虚拟环境: virtualenv [虚拟环境名称] 例如: virtualenv env_test ...

  3. liunx工具学习之taskset

    当你优化多线程任务的时候,发现某个线程在不同的核上跳转较大,从而耗费CPU的时候想法肯定是想可以把对应线程绑定到特定的核上,可是每次这样操作每次尝试看效果的时候都要重启进程,那有没有一个工具可以直接处 ...

  4. 根据显示器的分辨率,加载不同CSS样式表

    <link rel="stylesheet" type="text/css" id="css"><script langu ...

  5. AE编码、稀疏编码(待续)

    http://ufldl.stanford.edu/tutorial/unsupervised/SparseCoding/

  6. Win10 Backup&Restore Start Menu(备份还原开始菜单)

    Win10 的开始菜单,不是很稳定!系统装完4天,开始乱了3次,要知道我的开始菜单全屏并且进过尽心布局的,很是心酸! 连着找了几天备份开始菜单的方法,无果!后来发现了下边两个PowerShell命令, ...

  7. onerror="javascript:this.src='images/defaultUpload.png';"引发的死循环错误

    18:10:47.441 WARN o.s.web.servlet.PageNotFound:1101 - No mapping found for HTTP request with URI [/c ...

  8. Byte.parseByte(String s,int radix)的解释

    1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下 ...

  9. 重温CLR(九) 接口

    对于多继承(multiple inheritance)的概念,许多程序员并不陌生,他是指一个类从两个或多个基类派生的能力.例如,假定TransmitData类的作用是发送数据,ReceiveData类 ...

  10. (转)Android studio 使用心得(五)—代码混淆和破解apk

    这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...