我应该在Bitmaps中使用什么容器?

时间:2012-04-15 15:25:14

标签: android

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

1 个答案:

答案 0 :(得分: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 Exception,除非您在开始时加载和释放位图(在它们上面调用recycle())。

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