Bitmap 详解(1)- 提高Bitmap解析速度( Resources , BitmapFactory , AssetManager ,主题定制 )
? ? ? 图片是应用里面最常用的资源,在canvas里面使用需要将其解析成Bitmap的方式(例如倒影效果)。这里给出几个可能会有的场景,探讨一下如何使用:
应用主题转化:当某个应用希望换掉整个生命周期中的一些背景图片,例如从卡通主题转化到草原主题,这样会涉及到Button、Tab、Layout等各式各样图片的替换。动画播放:例如关机动画、闹铃提醒(当然简单的动作除外)? ? ? 转载请注明http://ishelf.iteye.com/blog/1032563
? ? ? 场景一中,可以通过apk升级来实现,也可以通过调用外部资源来实现。这两种方式比较简单,问题也就显而易见。第一种apk升级很烦人,至少我自己都懒得去。第二种,外部资源是简单,不过图片的解析速度一定会比从apk中调用drawable资源要慢好几倍,对于配置很好的机器这个速度不是问题,可是中下的机器可就够受了(最近试了试中兴的平板,和三星的对比太鲜明了)。这两个的前提都是对图片显示要求不是非常的很高,例如图片预览
? ? ? 在场景二中,需要考虑到定制的问题。你给国内和国外的关机动画不能一样吧,给联通和给电信定制的不能一样吧(这个也根据需求而定,不排除都一样的可能)。这样当需求变化时,难道你的代码也要跟着变化么? 这样的话真给Java显眼了,O(∩_∩)O。 其实在场景一中的主题替换也是一个定制的问题。
? ? ? 如何能在保证即不修改代码又能保证图片解析速度尽可能快的前提下,做到图片资源的定制是接下来要讨论的问题。首先看代码
?
?
? ? ? ?代码是参考来源:http://blog.csdn.net/sodino/archive/2011/03/01/6215224.aspx? ? 。这里主要使用了Java反射机制,得到了res(Resources)(这个博主挺nb的,O(∩_∩)O)。?Resources类是实现apk资源解码的核心,具体类的作用这里就不介绍了(不懂得看源码去)。
? ? ? ?如果是在framework中使用就简单了,看代码
?
BitmapFactory.decodeResource(resources, source_id);? ? ?resources就是第一步得到的Resources类,id则是第二部得到的id号。需要注意一点就是变量的作用域。
?
?
经过上面三步可以很容易的实现使用apk的方式调用外部的图片资源。
?
?
?
?
?
?
?
?
?
?
?
?
?