0

我正在使用 ViewFlipper 使用数组动态显示图像。图像大约为 100。当我运行该活动时,应用程序因java.lang.OutOfMemoryError:错误而停止。合并后的图像大小约为 7 MB。为了显示所有图像应该怎么做?以下是我正在使用的 java 代码。

ViewFlipper viewflipper;
int result_images[]= 
{R.drawable.resultone,R.drawable.resulttwo,R.drawable.resultthree,
...,R.drawable.resultonehundredsixteen};

viewflipper = (ViewFlipper) findViewById(R.id.viewflipper);
for(int i=0;i<result_images.length;i++)
{
    //  This will create dynamic image view and add them to ViewFlipper
    setFlipperImage(result_images[i]);
}

viewflipper.startFlipping();

private void setFlipperImage(int res) {
    Log.i("Set Filpper Called", res+"");
    ImageView image = new ImageView(getApplicationContext());
    image.setBackgroundResource(res);
    viewflipper.addView(image);
}
4

2 回答 2

1

这些图像中的每一个将消耗 1228800 字节的堆空间(640 x 480 x 4 字节/像素),这有点超过 1MB。其中 100 个将消耗约 120MB 的堆空间。在许多 Android 设备上,您不会有那么多堆空间,并且ViewFlipper需要您预先加载所有这些图像。

你需要改变你的方法,这样你就可以一次只在内存中保存一些图像。至少,这将需要切换ViewFlipper到不需要预先加载所有内容的其他东西(例如,使用AdapterViewFlipper)。

另外,您需要将这些图像放入res/drawable-anydpi/or中res/drawable-nodpi/。我的猜测是您将它们放在其他地方(例如res/drawable/),在这种情况下,它们的内存消耗将在高分辨率设备上大幅增长。

于 2018-10-11T12:36:12.327 回答
0

不要使用 viewflipper,使用来自 android.support.v4 的 viewpager。看看以下示例如何将 viewpager 与适配器一起使用。可以在以下博客文章中找到更多详细信息。

看看下面的文章。您需要缩放图像并适当地处理它们。7 MB 是压缩图像的大小。位图占用更多空间。

您也可以尝试使用Picassoglide库来有效地处理图像。

于 2018-10-11T12:30:54.720 回答