将动画显示为动态壁纸的最佳方法是什么?现在我有一个gif分为11 png(每帧一个),然后我正在做

public Bitmap frame0;
ArrayList<Bitmap> frameArray = new ArrayList<Bitmap>();
frame0 = BitmapFactory.decodeResource(getResources(), R.drawable.nyancat0);
frame0 = Bitmap.createScaledBitmap(frame0, minWidth, minHeight, true);
frameArray.add(frame0);


然后我只用一个For Loop遍历框架并将它们绘制在画布上

canvas.drawBitmap(frameArray.get(indexnumber), 0, 0, mPaint);


然后我只更改索引编号++,除非它是11,然后回到1。
那行得通,但是,当然,存储这么多的位图会导致内存效率低下。这使我无法进行多层或其他炫酷效果,而不会造成滞后和电池消耗。有没有更好的方法可以在Android Live壁纸上显示动画?我尝试使用Movie电影来显示整个GIF,但动态壁纸不支持该功能。

最佳答案

图像加载需要多长时间?如果可以忽略不计,那么为什么不在显示每个图像之前就立即加载它们,而丢弃旧图像呢?这样一来,您在任一阶段的内存中只有1张图像。

或者,执行类似于使用后缓冲区的操作,在内存中保留两个空间,一个用于当前显示的图像,另一个用于向其中加载下一个图像。当需要更改时,可以使新加载的位图可见,卸载另一个位图,然后将下一个帧加载到该位图中。

07-26 08:28