我正在开发一个动态壁纸,可以在背景上再现动画(如短视频)。
有谁知道如何有效加载各种全屏大小的位图并在画布上绘制它们? 我尝试了两种方法,两者都不是很好。
方法#1: 在壁纸启动时加载所有位图。
问题:内存超出限制(约35MB)无法加载超过10位图。所以动画缺乏不同的图像。
方法#2: 仅加载2位图。在运行时,绘制位图,删除旧位图,加载新位图,重复。
问题:消耗了很多系统,(不是内存,但一般会降低操作系统),但是它可以工作,因为它不会超出内存限制。但是,仍然会降低整个系统的速度。
示例:
Drawer.drawAll(res,c,p);
res.removeOldBitmaps();
res.loadNewBitmaps(wpservice,display);
我想到的另一种方法是在separete线程上加载资源,你们怎么想?你有其他解决方案吗?
干杯!
答案 0 :(得分:0)
解决了,我找到的解决方案如下:
在运行时加载图像,1乘1.
并使用以下选项:
/**Effective image decoder by chelin**/
public static Bitmap decodeResource(WallpaperService wpservice,int id){
int scale=1;
Resources res = wpservice.getResources();
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inPreferredConfig = Bitmap.Config.ARGB_8888;
o2.inSampleSize=scale;
o2.inPurgeable = true;
o2.inInputShareable = true;
return BitmapFactory.decodeResource(res, id, o2);
}
希望它有效,因为它对我有用。干杯!