我是靠谱客的博主 淡淡雪糕,最近开发中收集的这篇文章主要介绍【补充】关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析背景答疑总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
背景
- 凯子哥原博客讲解了同一张 jpg 图片放在不同的 drawable 目录下,在1080p的锤子T1手机上内存占用情况。
- 我有一个疑问:同一张图片放在不同的 drawable 目录下,加载进内存后会有宽高尺寸的变化?
答疑
- 为什么这张 720*1280 图片放到 锤子T1 的 xxhdpi 目录下,能够以 720*1280 的尺寸加载进内存?
答:1080p 的锤子 T1手机,ppi=445,和 xxhdpi 目录的缩放比是匹配的 (查看官方文档 ,将语言切换为英文,能够看到320ppi ~ 480ppi 对应的资源目录为 drawable-xxhdpi)
从官方文档可以看出,drawable-xxhdpi 目录中的图片在锤子 T1上显示时,图片上的 1px 对应手机屏幕的1px, 所以drawable-xxhdpi 目录中的图片加载进内存后,和图片原宽高一致。 - 为什么这张 720*1280 图片放到锤子T1的 drawable-hdpi 目录下,加载进内存的宽高为1440*2560?
答:看下图,官方文档中标明 hdpi 对应的缩放比 为1.5,xxhdpi 对应的缩放比为 3
那么放在 drawable-hdpi 目录中的图片,在锤子T1手机上希望展示同样的 dp 尺寸,就要将 drawable-hdpi 目录中图片缩放为 3/1.5 = 2 倍。(这个也比较好理解,drawable-hdpi 目录中的 icon 图片都比较小,如果1080p 的手机加载这个文件夹中的图片,肯定要将其放大,这样在 1080p屏幕上展示的尺寸才能和低分辨率屏幕展示的尺寸相等。这也就是为什么dp是与设备无关的一个值。再举个例子:为什么我们所有切图都放在 xhdpi 目录下,apk 运行在 1080p 的手机上时,能够正常按设计图展示而没有感觉切图小了?那是因为切图被系统放大了 3/2=1.5 倍展示。)
所以这张 720*1280 图片放到锤子T1的 drawable-hdpi 目录下后,加载进内存时,尺寸就被 Android 系统缩放了 3/1.5 = 2倍,变成了1440*2560 - 为什么这张 720*1280 图片放到锤子T1的 drawable-xxxhdpi文件夹下,加载进内存的宽高为540 * 960?
答:原因同问题 2,与锤子T1匹配的目录 drawable-xxhdpi缩放比是 3,drawable-xxxhdpi 目录对应的缩放比是 4,所以这张 720*1280 图片放到锤子T1的 drawable-xxxhdpi 目录下后,加载进内存时,尺寸就被 Android 系统缩放了 3/4 倍,变成了540 * 960
总结
- Android图片放在不同文件夹下加载进内存这个课题有三个关键要素
- 手机屏幕的 ppi(查看系统的 /system/bulid.prop 文件中ro.sf.lcd_density=445 就是手机出厂设定的 ppi)
- 图片放在 apk 中的drawable目录
- 被观察的图片像素尺寸
- 当图片放在与手机屏幕 ppi 对应的drawable 目录下,图片就能以自己实际的宽高加载进内存。否则就要按比例进行缩放宽高加载进内存。
补充知识点
- DPI/PPI
DPI = Dots Per Inch
PPI = Pixel Per Inch
两个参数的区别就在于Dot和Pixel的区别,dot值的是显示器上每一个物理的点,而pixel指的是屏幕分辨率中的最小单位。这个两个难道会不一样么?会!当一个像素需要多于一个屏幕上的物理点来显示的时候dot就跟pixel不一样了。这个有另一个叫法叫做dppx(dot per pixel),即每个像素中有多少个点。大部分的显示器中一个像素即一个点,但目前一些比较好的屏幕和一些手机屏幕中dppx会大于1。比如说Mac Retina,iPhone,HTC One等。
总结来说我们一般针对Android手机说的 dpi 和 ppi 是等价的。 - 通过修改系统配置文件 /system/bulid.prop 中的 ro.sf.lcd_density 值来增加屏幕尺寸
有些喜欢搞机的朋友,发现自己手机是 5.5 寸的,但是和 5 寸的手机一屏显示的内容是一样多的,只是图片文字等被等比放大了。他们会通过修改ro.sf.lcd_density 为一个较小的数字,来增加屏幕上显示的内容。(可以参考这个bbs链接)
这里讲一下原理:- 例如:锤子T1本身的 ppi 是 445,在 320 dpi ~ 480dpi 之间,匹配的目录是 drawable-xxhdpi,缩放倍数是 3。drawable-xxhdpi 中的图片在锤子T1上就能按实际尺寸显示在屏幕上。
- 如果把锤子T1的 ppi 改为 300,那么就是在 240dpi ~ 320dpi之间,匹配的目录就是drawable-xhdpi,缩放倍数是 2。那么drawable-xxhdpi 中的图片在修改后的锤子T1上就需要缩放为 2/3 显示在屏幕上。也就是图片在屏幕上展示变小了。屏幕上能显示的内容自然就变多了。
- 通过 1、2 可以看出来,手机还是锤子 T1没变,Apk 包也没变,只是把 ro.sf.lcd_density 改小了,手机显示内容就变多了。
最后
以上就是淡淡雪糕为你收集整理的【补充】关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析背景答疑总结的全部内容,希望文章能够帮你解决【补充】关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析背景答疑总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复