Android 如何正确使用我们的图片资源

原创 2016年08月31日 13:27:05

如何正确放置我们的图片资源

一.背景

为了减少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使用图片资源

android项目下资源文件放到res
  • clj198606061111
  • clj198606061111
  • 2014年05月03日 15:08
  • 4590

Android获取图片资源的4种方式

 1. 图片放在sdcard中,  Bitmap imageBitmap = BitmapFactory.decodeFile(path) (path 是图片的路径,跟目录是/sdcard)   2....
  • gf771115
  • gf771115
  • 2010年12月17日 15:34
  • 61394

Android资源图片读取机制

在新建一个Android项目时,在res目录下会自动生成几个drawable文件夹,drawable-ldpi,drawable-mdpi,drawable-hdpi,一直以来都对此不太清楚,图片应该...
  • yellowcath
  • yellowcath
  • 2014年09月28日 14:59
  • 5180

常用Android图片资源

  • 2012年08月09日 21:32
  • 2.44MB
  • 下载

Android TextView中显示图片的4种方式

我们知道,TextView控件一般是用来显示文本的,而图片一般是用ImageView控件来显示。那TextView能否显示图片呢?答案是肯定的!下面列出常见的4种方式。...
  • hwe_xc
  • hwe_xc
  • 2016年03月17日 11:28
  • 15759

使用shape图形资源制作引导页面的提示圆点

在app引导界面通常有引导界面提示小圆点,下面简单介绍一下利用shape图形资源如何实现: 本文引导界面是使用的ViewPager,当ViewPager滑动时候可以动态的改变小圆点的颜色来提示用户 ...
  • zw382701145
  • zw382701145
  • 2016年02月03日 10:31
  • 1915

Android图片资源处理

Android用到的图片资源一般指三种:png/jpg等位图文体,.9文件,selector xml文件,在之前的开发中,都放在drawable目录下,但使用最新的Android Studio时,我们...
  • nalw2012
  • nalw2012
  • 2016年05月09日 00:21
  • 1150

Android 获取图片资源的4种方式

  • 2011年04月14日 22:40
  • 1KB
  • 下载

移动APP切图术语解读:什么是@1x @2x和@3x【转自25学堂】

现在很多APP设计师小白都会稀里糊涂的在解读这些缩放1倍,扩大2倍或者说扩大1.5倍 等等之类的言论。 大家谈论的却是也没有错。如果你搭配上@1x @2x和@3x的话,你的理解就有问题啦! 首先我...
  • LCZJYCoder
  • LCZJYCoder
  • 2016年05月17日 14:54
  • 1354

@1x,@2x,@3x 资源文件自动分包工具-android 篇

前沿:现在开发中ios,android会使用一套图,但是ui设计师给的图命名是以@1x,@2x,@3x这样命名的,android 客户端使用起来就略嫌麻烦了,这个小工具可以实现简单的分包。原理:I/o...
  • o279642707
  • o279642707
  • 2017年01月17日 11:32
  • 1021
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 如何正确使用我们的图片资源
举报原因:
原因补充:

(最多只允许输入30个字)