最近做的项目,客户临时要求改版,我真的是最烦这个,要求跟换主页面的背景,换上新的背景图,要求是动态的。
效果(我随便拿的五个图片做的gif):
方案:
帧动画方案:
缺点:1.好像只能imageview才能播放帧动画
2.容易OOM(播三四张还行,播九十张以上,且,每张都在300k左右就有OOM问题)
3.看到网上方案解决帧动画OOM,是一次播放十张,再往里面添十张,再播放。问题就有了,动画有一个 添加十个图片的时间卡顿。
surfaceview方案:
因为imageview要是以一张一张换,性能必定不如surfaceview。核心应该是
canvas = surfaceHolder.lockCanvas(rect);
canvas.drawBitmap(lruCache.get(folderName + "/" + assets[position]), null, rect, null);
我把上百张的图片放在assets文件夹下,然后读取图片(这边可以做Lrucache优化),下边贴出我的代码:
surfaceHolder = sv_main.getHolder();