8

这是我的 viewpager 的可绘制数组,当我运行它时,我会导致内存不足错误,有没有办法减小图像大小等?我做了很多搜索,但我也不能使用它们..请帮助...

GalImages = new int[] { R.drawable.tutorials_01_android_en,R.drawable.tutorials_02_android_en,R.drawable.tutorials_03_android_en,R.drawable.tutorials_04};break

@Override
public Object instantiateItem(ViewGroup container, int position) {

    ImageView imageView = new ImageView(context);
    final int temp = position;
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setImageResource(GalImages[position]);

    ((ViewPager) container).addView(imageView, 0);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {}
    });
    return imageView;
}
4

6 回答 6

19

它是一个已知的错误,它不是因为大文件。由于 Android 缓存了 Drawables,因此在使用少量图像后内存不足。但是我通过跳过android默认缓存系统找到了替代方法。

Soultion : 在 Assets 中创建一个 drawable 文件夹并将图像移动到 assets 中的“drawable”文件夹,并使用以下函数获取 BitmapDrawable

public static Drawable getAssetImage(Context context, String filename) throws IOException {
    AssetManager assets = context.getResources().getAssets();
    InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
    Bitmap bitmap = BitmapFactory.decodeStream(buffer);
    return new BitmapDrawable(context.getResources(), bitmap);
}

参考:https ://stackoverflow.com/posts/6116316/revisions

此外,在您的清单文件中添加以下行

android:largeHeap="true"
于 2013-09-03T05:54:18.177 回答
12

根据您的分辨率,尝试将您的可绘制对象从较低的 MPI 移动到 HDPI 甚至更高维度的文件夹(如 XHDPI)。

我的图像尺寸范围为 400-800 像素。我将我的可绘制对象存储在我的 Galaxy S4 上抛出 OutOfMemory 的 MDPI 中。我将它们移至 HDPI 并解决了问题。

于 2015-01-14T08:44:03.463 回答
2

正如 Muhammad 所提到的,尝试将可绘制(或 MDPI)中的图像移动到 HDPI 或更高维度的不同维度文件夹中。

始终尝试尽可能使用压缩的 PNG。有很多在线站点,您可以对它们进行非常大规模的压缩。

参考:http: //developer.android.com/guide/practices/screens_support.html

于 2015-10-19T13:52:49.397 回答
2

只要您的图像尺寸不是很大,您就可以将drawable-nodpi文件夹用于您的 PNG。我可以确认这为我解决了这个问题。

于 2015-12-24T06:46:35.913 回答
0

添加android:largeHeap:"true"到您的清单文件并将您的可绘制图像移动到文件夹mipmap-hopi中。

[安卓] [java] [安卓工作室]

于 2016-11-29T00:20:18.070 回答
0

@Muhammad 之前在这里提到过,创建多个包含的图像(hdpi、ldpi、mdpi、xdpi 等)为我解决了这个问题。

因为我花了一些时间弄清楚如何添加这些文件,这里有一些解释它的打印屏幕:Drawable --> New --> Batch Drawable Import (for multiple files) 然后添加文件,然后选择分辨率 在此处输入图像描述
在此处输入图像描述

于 2018-06-12T13:06:17.530 回答