android开发图片分辨率
一直受到android开发图片分辨率问题困扰.drawable-(xdpi,hdpi,mdpi,ldpi,nodpi)这几个文件夹到底怎么放图片呢?
dpi是什么呢?
dpi是“dot per inch”的缩写,每英寸像素数。
四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
dpi计算公式
DPI=对角线的像素值/尺寸
手机屏幕分辨率和屏幕密度是两码事!并不是800*480的分辨率手机图片就应该放在hdpi文件夹中。5.0英寸 800*480属于mdpi
也可以通过代码获取:
1 |
DisplayMetrics metric = new DisplayMetrics(); |
android会根据屏幕本身的尺寸与密度特性,自动载入对应的资源,并把它们从逻辑像素(DIP,用于定义界面布局)转换成屏幕上的物理像素。
首先看看 系统是如何通过Resources的getDrawable(int id)方法找图片的
1 |
public Drawable getDrawable(int id) throws NotFoundException {
|
TypedValue 我们可以理解为存储数据的类型,主要被Resouces使用于持有的资源值
通过getValue(id,value,true)方法去得到该id的资源的属性
1 |
public void getValue(int id, TypedValue outValue, boolean resolveRefs) |
最后通过loadDrawable(value, id)得到drawable,该方法到了底层的C代码,大致意思就是通过TypedValue中的方法和属性就可以获得我们想要的属性值,然后加载图片
OK,下面来做个实验.
试验一: 手机是1280*720 4.3英寸 属于xdpi 图片分辨率为960*640 (按正常图片不缩放 图片放在手机里面 应该不会充满 整个手机) 我把图片放在不同drawable文件夹中
文件夹 加载时间(ms) 图片显示 说明
drawable 311 充满屏幕 图片有拉伸
drawable-nodpi 130 未充满屏幕 图片显示正常
drawable-ldpi 442 充满屏幕 图片有拉伸
drawable-mdpi 383 充满屏幕 图片有拉伸
drawable-hdpi 226 充满屏幕 图片有拉伸
drawable-xhdpi 109 未充满屏幕 图片显示正常
试验二: 手机是800*480 4.3英寸 属于hdpi 图片分辨率为960*640 (按正常图片不缩放 图片放在手机里面 应该充满 整个手机) 我把图片放在不同drawable文件夹中
文件夹 加载时间(ms) 图片显示 说明
drawable 290 充满屏幕 图片拉伸
drawable-nodpi 127 充满屏幕 图片显示正常
drawable-ldpi 369 充满屏幕 图片拉伸
drawable-mdpi 346 充满屏幕 图片拉伸
drawable-hdpi 124 充满屏幕 图片显示正常
drawable-xhdpi 241 未充满屏幕 图片缩放
得到结论:
drawable-nodpi 中 图片不会被拉伸
系统在得到图片时候,会先到设备对应的dpi的文件夹下去去找资源文件,找到后应该不会做缩放直接返回图片。
如果没有在对应的dpi文件夹中找到,回去其他文件夹中查找,找到后会做相应的缩放。
在高dpi找到的图片会缩放,在低dpi的会拉伸
还有就是 源码中可以看出 loadDrawable的过程实在C层做的。通过系统资源id加载会比java层直接加载图片更便捷。
如有错误,请指正。谢谢!
http://my.eoe.cn/474891/archive/10398.html
android开发图片分辨率的更多相关文章
- android开发图片分辨率问题解决方案
dpi是什么呢? dpi是“dot per inch”的缩写,每英寸像素数. 四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (ex ...
- Android 开发 图片网络缓存加载框架Fresco
简介 Fresco是一个在Android应用程序中显示图像的强大系统. Fresco负责图像的加载和显示.它将从网络.本地存储或本地资源加载图像,图像加载完成前会显示一个占位图片.它有两个级别的缓存: ...
- android开发 图片合成
private static Bitmap compositeImages(Bitmap srcBitmap,Bitmap dstBitmap){ Bitmap bmp = null; //下面这个B ...
- Android开发之多媒体编程之加载大分辨率图片
Android中图片占用内存的大小=图片的总像数*每个像数占用的大小. Android保存图片像素信息使用ARGB,意思是每个像素占用4个字节. 以分辨率为2400*3200的图片来说,加载到Andr ...
- 62.Android之各分辨率定义的图片规格
转载:http://www.nljb.net/default/Android%E4%B9%8B%E5%90%84%E5%88%86%E8%BE%A8%E7%8E%87%E5%AE%9A%E4%B9%8 ...
- Android开发中如何解决加载大图片时内存溢出的问题
Android开发中如何解决加载大图片时内存溢出的问题 在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...
- Python 制作Android开发 所需的适配不同分辨率的套图
使用Python做起工具来还真是爽,简单,方便,快捷.今天忙活了一下,制作出一个比较实用的小工具. 自动化套图制作,适配不同屏幕 尤其是对于android开发来说,要适配不同屏幕就需要多套切图,那么. ...
- android开发分辨率适配总结
重要概念 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 什么是dp.dip.dpi.sp.px?他们之间的关系是什么? 什么是mdpi.hdpi.xdpi.xxdpi?如何计算和区分? 在下面的内容中我 ...
- Android开发笔记——图片缓存、手势及OOM分析
把图片缓存.手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的.首先,预览大图需要支持手势缩放,旋转,平移等操作:其次,图片在本地需要进行缓存,避免频繁访 ...
随机推荐
- 【php】分享一个php转换微信、QQ、微博 特殊非主流 | 杀马特 网名的 function
1.实现的效果: 2.将上面带有图标.非主流的文字,转换成utf-8格式,能存进去和读出来. 3.code: function emoji_encode($nickname){ $strEncode ...
- Android短信管家视频播放器代码备份
自己保留备份,增强记忆 这是video的类 public class VideoActivity extends Activity { /** * 解析网络页面 */ private WebVie ...
- android 发送短信的两种方式,以及接收报告和发送报告
android发送短信,以及接收报告和发送报告 android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下: 一.调起系统发短信功能 ...
- IDEA安装使用 VisualVM 及VisualVM 远程监视
1. VisualVM是什么 按照VisualVM官网(http://visualvm.github.io/)上的介绍,VisualVM是一个集成命令行JDK工具和轻量级分析功能的可视化工具.专为开发 ...
- Debug 路漫漫-01
运行到子函数时提示报错: === 这个断点一步步debug下来是顺利的,但是咋就超出数组范围了呢,这会是什么问题. ——sess肯定超过索引了,那个sess(:,2)的值肯定超过V的行数了. ——由 ...
- 【DeepLearning】Exercise:Self-Taught Learning
Exercise:Self-Taught Learning 习题链接:Exercise:Self-Taught Learning feedForwardAutoencoder.m function [ ...
- google开发新人入职100天,聊聊自己的经验&教训 个人对编程和开发的理解 技术发展路线
新人入职100天,聊聊自己的经验&教训 这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果 ...
- 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间
模块图片,4位共阳极数码管. 我们使用树莓派wiringPi的库来通过74HC595驱动4位数码管: C 代码如下: #include <wiringPi.h> #include < ...
- MFC的DLL中实现定时器功能
方法一:创建一个线程, 反复读系统时间不就可以了? 如果定时要求不严,用Sleep就可以了.DWORD WINAPI TimerThread(LPVOID pamaram) { UINT oldTic ...
- table中background背景图片自动拉伸
<table background="login/image/jiaozhouwan.jpg" style="background-size: 100% 100% ...