0

我必须创建这样的布局:

截屏

如您所见,所有视图(图像、按钮)都位于可滚动屏幕中。这是专辑的布局。

问题是当我在这张专辑屏幕上显示许多图像时,它会因内存不足错误而崩溃。

我选择的方式是将它们全部放在一个LinearLayoutinside aScrollView中。我知道如果我们需要显示很多视图,我们可以使用 listview,但我不能用ListView.

有人可以帮我吗?

4

3 回答 3

0

您可以使用 inSampleSize 来减少内存占用。

这是我的代码

public static Bitmap decodeAndResizeFile(File f) {
    try {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);

        // The new size we want to scale to
        final int REQUIRED_SIZE = 70;

        // Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {
    }
    return null;
}

在这里,它将使用解码图像inSampleSize,此代码将为inSampleSize您找到最佳值。

它对我来说很好。

如果你不想使用上面的代码,你也可以使用bitmap.recycle()System.gc()释放未使用的内存。但是,上面的代码对我来说很好。您可以使用两者中的任何一个。

objbitmap.recycle();
objbitmap = null;
System.gc();

希望,这可以解决问题!

于 2013-03-07T05:22:06.680 回答
0

要制作这种类型的视图,您必须使用线性布局。像这儿

线性布局(垂直)
标题
图像
线性布局水平
{
线性布局垂直
按钮按钮
图像
图像
...
}
线性布局垂直
{
图像
图像
...
}

于 2013-03-07T05:00:59.853 回答
0

我可以想到两个选择:

  1. 组织项目,使每个项目视图中的每个项目视图ListView都有一组交错的元素,最终它们可以被屏蔽成ListView元素。每 N 个图像的顶部/底部都必须在视图边界处对齐。您也许可以将 4-6 个图像以交错的模式放置,这样仍然可以实现效果,但是该元素块变成了可以回收的视图。

  2. ListView并排使用两个元素。无论触摸哪一个,您都可以将一个传递OnScrollListener给每个ListView以同步它们的滚动动作,从而使外观看起来是一个视图。通过这种方式,您可以完全错开图像,但是适配器需要做更多的工作,因为您必须从一个数据源提供两个视图。

于 2013-03-07T04:49:44.700 回答