2

我正在尝试制作一个包含大约 20-30 个资源图像的 Android 应用程序。这些图像用于在画布上显示连续动画,所以我想知道我应该使用什么容器来存储这些图像以获得最佳性能?

4

1 回答 1

1

听起来您已经明白这些图像应该进入 res/drawable 目录(如果没有,那就是它们所在的位置)。

假设您将图像命名为“image0”、“image1”、“image2”等,您实际上可以遍历这些字符串并像这样加载它们:

int myImgLen = 10;//or however many images you have, you can also do this dynamically looking for when getIdentifier returns 0, which means it didn't find anything at that name
ArrayList<Bitmap> myList = new ArrayList<Bitmap>;
for(int i = 0; i < myImgLen; i++)
myList.add(BitmapFactory.decodeResource(this.getResources(), 
    this.getResources().getIdentifier("image" + i, "drawable", getPackageName()))
);

这会将您的图像加载到该 ArrayList 中。

然后,您可以一次简单myCanvas.drawBitmap(myList.get(i));地将它们绘制到您的画布中。

但是请记住(这非常重要),这在内存消耗方面非常昂贵。如果您的图像是经过很好压缩的 JPG,那么当您将它们加载到位图中时,它们会爆炸,每个像素都会根据您用于加载图像的任何配置占用尽可能多的空间。因此,如果您使用一些小图像来将它们作为动画运行,那将可以正常工作,但如果您希望拥有设备大小的东西(如墙纸),您肯定会得到一个OutOfMemory 异常,除非您随时加载和释放位图(调用recycle()它们)。

但是,如果您在制作动画时确实对它们调用了 recycle(),那么当图像加载时,您会在动画中看到很多暂停。

于 2012-04-15T16:26:45.627 回答