如何在没有OutOfMemoryError的情况下填充图像列表视图

时间:2013-06-10 08:45:17

标签: android android-listview android-fragments

我正在使用android.support.v4.app.Fragments,我必须填写一张图片列表,我得到它们作为字节数组,

这是我的代码

final NewSite site = data.get(position);

        if(null != site.getImage()){
            bmp = BitmapFactory.decodeByteArray(site.getImage(), 0, site.getImage().length, options);
            holder.image.setImageBitmap(bmp);
        }
        if(null != site.getDescription())
            holder.informations.setText(site.getDescription() + "    " + position);
        if(site.getListOfChildren() != null && site.getListOfChildren().size() != 0){
            Log.i("BitmapFactory", site.getListOfChildren().size() + "");
            for (NewSite newSite : site.getListOfChildren()) {


                if(null != newSite.getImage()){
                    bmp = BitmapFactory.decodeByteArray(newSite.getImage(),0,newSite.getImage().length, options);
                    view = new ImageView(context);

                    view.setLayoutParams(new LayoutParams(30, 20));
                    view.setPadding(2, 0, 2, 2);

                    view.setImageBitmap(bmp);

                    holder.listOfImages.addView(view);
                    bmp = null;
                    //view = null;
                }

我总是得到OutOfMemoryError Exception

1 个答案:

答案 0 :(得分:1)

我会显示图片的subsampled版本(如果您还没有这样做,您的选项代码不在您的问题中),这会占用更少的内存,因为它会降低质量Bitmap的。{点击后,您始终可以显示Bitmap的更高版本。

我在我的一个应用程序中使用此代码对图像进行二次采样,以便我不会耗尽内存。

BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = yourSampleSize;

Bitmap returnBmp = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), o2);

希望这可以帮助您找到解决方案。 Bitmap处理的内存不足问题永远不会有趣。