Android 如何正确使用我们的图片资源
来源:互联网 发布:台湾政治知乎 编辑:程序博客网 时间:2024/05/01 14:12
如何正确放置我们的图片资源
一.背景
为了减少app的体积,有时候我们会选择将icon和背景图只放置在drawable-xhdpi目录下面。其目的就是使用一张图也能在不同屏幕密度的设备上适配,使那些设置wrap_content的图片在不同屏幕密度的设备上保持相同的比例。(当前这些图片会根据不同屏幕密度而进行缩放)。
二.存在问题
事实上,当前很多android设备厂商将1080p(440-480dpi,对应xxhdpi)屏幕作为旗舰屏幕。若我们将图片在放置在drawable-xhdpi目录下面,1080p屏幕上相同的Bitmap大小会变为以前的1.5倍。若我们把相同的图片放置在drawable-xxhdpi下面,图片显示一样清晰,但Bitmap大小不会扩大。
我们首先介绍一下一张bitmap位图在内存中的大小的计算公式:
bitmap占内存大小 =图长 * 图宽 * 每个像素占用的字节数
其中每个像素占用的字节数与Bitmap.Config的配置有关,默认的配置为ARGB_8888
- Bitmap.Config.ALPHA_8 此时图片只有alpha值,没有RGB值, 一1个像素占用一个字节
- Bitmap.Config.ARGB_4444 一个像素占用2个字节,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占4个bites共16bites,即2个字节
- Bitmap.Config.ARGB_8888 一个像素占用4个字节,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占8个bites,共32bites,即4个字节。这是一种高质量的图片格式,在电脑上普通采用。它也是Android手机上一个Bitmap的默认格式。
- Bitmap.Config.RGB_565 一个像素占用2个字节,没有alpha(A)值,即不支持透明和半透明,Red(R)值占5个bites ,Green(G)值占6个bites ,Blue(B)值占5个bites,共16bites,即2个字节。对于没有透明和半透明颜色的图片来说,该格式的图片能够达到比较的呈现效果,相对于ARGB_8888来说也能减少一半的内存开销。
所以假设10张600*600的图片加载到内存中。
1. 若系统未进行缩放占用的内存为600*600*4*10大约14兆内存。
2. 若我们将图片放置在xhdpi下,并在1080p手机上使用,则会占用14*1.5的内存。2k屏的手机14*2的内存占用。
三.实际测试
我们使用sony z3 compact测试,将引导图中的wrap_content改为dp值,并将引导图从drawable-xhdpi移动到drawable-nodpi中,我们切换到引导图页面,比较前后堆空间大小。
图片放置drawable-xhdpi下的结果如下图:41.03MB
图片放置drawable-nodpi下的结果如下图:31.56MB
四.结论
从图中可以看出,堆空间的大小节省了快10兆,而且图片的显示质量是一样的。事实上与其让系统帮我们把bitmap放大,还不如我们自己手动将图片宽高设置成dp,并将图片资源放置在drawable-nodpi中。
五.UI切图使用方式
下面部分是我的一些看法,大家若有疑问可以一起讨论下,再确定最终执行方案。
1. 以后我们一些小icon,如返回图标,分享,点赞,等类似的小图片,尽量使用3x的图,并放置在drawable-xxhdpi。因为主流的手机已经是1080p的了,而非之前的720p。这样可以保证旗舰的机型显示不至于失真,这些小icon的宽和高可以设置成wrap_content,当然,我觉得设置成dx值也是可以的。
2.大家也看到一个现象,我们app大的资源背景图比较多,这一块我们可以从减少app包大小的角度出发,使用2x的图,并放置在drawable-nodpi目录下,并且宽高一定不要设置成wrap_content,尽量用dp或者match_parent代替。
六.参考资料
http://blog.csdn.net/wrg_20100512/article/details/51295317
- Android 如何正确使用我们的图片资源
- 如何正确使用FPGA的时钟资源
- Android React Native加载图片资源的正确姿势
- Android React Native加载图片资源的正确姿势
- android是如何加载资源图片的
- android是如何加载资源图片的?
- android是如何加载资源图片的
- android是如何加载资源图片的?
- Android字符串资源使用格式化占位符的正确姿势
- Android使用图片资源
- Android生成工具包时如何使用图片资源
- Android-如何正确使用WebView
- 如何使用Android自带的资源
- 如何使用Android自带的资源
- 如何编译android源码包res的图片资源
- Android的ImageView如何显示网络图片资源
- Android的ImageView如何显示网络图片资源
- 如何删除xcode项目中不再使用的图片资源
- Qt之界面换肤
- 阿里云Linux系统挂载数据盘
- setImageResource和setBackgroundResource的区别
- ie 7 float right 换行
- 单例模式简析
- Android 如何正确使用我们的图片资源
- Java语言--读取文件中的内容
- 使用MyEclipse自动生成hibernate的数据库表
- 建议18:foreach不能代替for
- 用redis实现消息队列
- eclipse离线安装velocity插件
- WCF 基础连接已经关闭: 接收时发生错误
- C# mysqlcheck 检查数据库异常+修复数据库
- sap.新总帐的数据结构