这是我的viewpager数组中的drawable,当我运行它时,我会导致内存不足错误,有没有办法减少图像大小等? 我做了很多搜索,但我也不能使用它们.. 请帮忙......
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;
}
答案 0 :(得分:19)
它是known bug,这不是因为大文件。由于Android缓存Drawables,因此在使用少量图像后内存不足。但我通过跳过Android默认缓存系统找到了它的替代方式。
<强> Soultion 强>: 在Assets中创建一个drawable文件夹,并将图像移动到资源中的“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"
答案 1 :(得分:11)
尝试将您的drawables从较低的MPI移动到HDPI或更高的维度文件夹,如XHDPI,具体取决于您的分辨率。
我的图片尺寸范围为400-800像素。我将我的drawables存储在我的Galaxy S4上抛出OutOfMemory的MDPI中。我把它们移到了HDPI,它解决了这个问题。
答案 2 :(得分:2)
正如Muhammad所提到的,尝试将 drawable (或MDPI)中的图像移动到HDPI或更高版本的其他维度文件夹。
始终尽量使用压缩的PNG 。有很多在线网站可以大规模压缩它们。
参考:http://developer.android.com/guide/practices/screens_support.html
答案 3 :(得分:2)
只要您的图片尺寸不是很大,就可以使用PNG的 drawable-nodpi 文件夹。我可以确认这解决了我的问题。
答案 4 :(得分:0)
将android:largeHeap:"true"
添加到您的清单文件中,并将您的可绘制图片移动到文件夹mipmap-hopi
。
[android] [java] [android-studio]
答案 5 :(得分:0)