Android:不同drawable文件夹的区别
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文件夹的区别的更多相关文章
- mipmap和drawable文件夹的区别
在Android上创建工程,会默认创建mipmap文件夹.之前在Eclipse上创建的是drawable的文件夹.那么这两个有什么区别呢? 问题: I'm working with android s ...
- Android assets res 文件夹的区别
大家都知道建立一个Android项目后会产生assets与res的两个文件夹,理论上他们都是存放资源的文件夹,那么他们到底有什么区别呢? 1.assets:不会在R.java文件下生成相应的标记,存放 ...
- Android学习笔记之Drawable 文件夹
PS:最近闲着无聊..模仿去写个QQapp..效果还不错..并且从中又学习到了一些相关的东西,在这里进行一些相关总结.. 学习内容: Android 中 Drawable 文件夹内部相关属性.. ...
- 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析
原文:关于Android中图片大小.内存占用与drawable文件夹关系的研究与分析 相关: Android drawable微技巧,你所不知道的drawable的那些细节 经常会有朋友问我这个问题: ...
- Android 适配(drawable文件夹)图片适配(二)
参考自(https://blog.csdn.net/myoungmeng/article/details/54090891) Android资源文件存放: android的drawable文件一共可以 ...
- Android Studio 复制粘贴图片到drawable文件夹没有效果 - 解决方法
我想放一些图片到drawable文件夹里面,但是简单的复制文件,粘贴文件,或者拖拽文件,都不起作用.不知道为什么,之前是可以的,突然就不行了. 解决方案 在drawable文件夹的目录上右键,选择Re ...
- Android 项目中文件夹的说明与作用(转)
(转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. ...
- Android res资源文件夹的知识积累
Android的开发框架耦合性还是比较低的,逻辑和布局被原生分开了.在Eclipse一般代码写在src文件夹下,资源等写在res文件夹下. drawable文件夹:该文件夹有很多变种,主要是为了适配A ...
- AndroidStudio 新建不同的Drawable文件夹
以前习惯eclipse开发Android的朋友们知道 新创建一个Android项目的时候eclipse会自动生成多个drawable文件夹来存放图片 但是Android Studio 新建项目的时候只 ...
随机推荐
- GPU编程自学3 —— CUDA程序初探
深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...
- ss-libev 源码解析local篇(3): server_recv_cb之SNI和STAGE_PARSE
上一篇看到STAGE_HANDSHAKE中的处理,到发出fake reply.这之后会从socks5 request中解析出remote addr and port,即客户端实际想要访问的服务器地址和 ...
- Ubuntu连接手机步骤
第一次使用adb之前,需要在home/.android里新建adb_usb.ini文件:0x1782. 注:adb已在安装系统后装好,手机要处于开机状态 查看设备命令: $ adb devices 正 ...
- Linux下nginx安装与配置
部分Linux发布版的默认安装已经集成了nginx,查看方法ls /usr/local,若已有nginx文件夹说明已集成. nginx依赖库pcre与zlib,且pcre依赖于gcc与gcc-c++, ...
- [Linux]Ubuntu中的System Setting
问题 使用Ubuntu的过程中,安装搜狗输入法,卸载了系统自带的ibus.输入法搞定后,发现System Setting没有了... 原因 因为在卸载ibus等软件时,会删除一些依赖包,删除过程可能会 ...
- ffpmeg下rtmp踩坑记录
1. flash端发布直播流 2.在 ffplay 命令行中 播放rtmp 直播流 ffplay "rtmp://127.0.0.1:80/live/ss live=1" 一直出 ...
- MYSQL 调优和使用必读
转载自:http://blog.eood.cn/mysql#rd?sukey=fc78a68049a14bb29c60f21c5254b15a1a9234459cf25ff467de14129ca11 ...
- python 除法
- IOI2002 POJ1054 The Troublesome Frog 讨厌的青蛙 (离散化+剪枝)
Description In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a we ...
- tensorflow图像基本处理
tensorflow库提供的专门的图片处理库,以下只是部分示例,更多函数请参照源码'\tensorflow_api\v1\image__init__.py' 加载图像 方式1: 使用tf.gfile. ...