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. DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)

    css中cursor属性详解-鼠标移到图片变换鼠标形状   语法: cursor : auto | all-scroll | col-resize| crosshair | default | han ...

  2. pcm ulaw alaw转换

    static byte ALawCompressTable[] = { 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5 ...

  3. 添加机构organizations模块

    startapp organizations models内容: from django.db import models from datetime import datetime # Create ...

  4. c++多线程编程:实现标准库accumulate函数的并行计算版本

    今天使用c++实现了标准库头文件<numeric>中的accumulate函数的并行计算版本,代码如下,注释写的比较详细,仅对其中几点进行描述: ①该实现假定不发生任何异常,故没有对可能产 ...

  5. Vim技能修炼教程(16) - 浮点数计算函数

    浮点数计算函数 这一节的所有函数,只有在vim编译时支持了+float时才有效. 三角函数 sin() : sine正弦函数 cos() : cosine余弦函数 tan() : tangent正切函 ...

  6. Ethernet、VLAN、QinQ

    以太网帧格式: 各字段解释: DMAC:目的MAC地址,该字段确定帧的接收者. SMAC:源MAC地址,该字段标识发送帧的工作站. Type:上层协议类型(0x0800:IP;0x0808:ARP;0 ...

  7. mysql查询慢之后

    |--缘起:早上刚一到公司就反映公司网站爆卡,线上erp完全无法使用,赶紧扔掉手中包子. --------------------------------------- |--排查:开发中会经常发现开 ...

  8. Java并发--synchronized

    以下是本文的目录大纲: 一.什么时候会出现线程安全问题? 二.如何解决线程安全问题? 三.synchronized同步方法或者同步块 转载原文链接:http://www.cnblogs.com/dol ...

  9. BZOJ4292 PA2015 Równanie 【暴力水题】

    BZOJ4292 PA2015 Równanie Description 对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和.现在给定三个正整数k,a,b,请求出满足a<=n< ...

  10. RNG—随机数产生器

    RNG 随机数产生器 RNG g_rng(12345); /********************************************************************** ...