Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Outofmemory drawable

this is my drawable in array for my viewpager, when i run it, i results in out of memory error, is there any way to reduce the image size or etc? i do lots of search but i can't use them as well.. please help...

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;
}
like image 740
Kennett Avatar asked Sep 03 '13 03:09

Kennett


4 Answers

Its a known bug, its not because of large files. Since Android Caches the Drawables, its going out of memory after using few images. But i found alternate way for it, by skipping the android default cache system.

Soultion: Create a drawable folder in Assets and move the images to "drawable" folder in assets and use the following function to get 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);
}

Refrence : https://stackoverflow.com/posts/6116316/revisions

Also that add the line below in your manifest file

android:largeHeap="true"
like image 189
Quamber Ali Avatar answered Sep 28 '22 12:09

Quamber Ali


Try moving your drawables from lower MPI to HDPI or to even higher dimension folders like XHDPI depending on your resolution.

My images's dimensions ranged from 400-800 pixels. I stored my drawables in MDPI that was throwing OutOfMemory on my Galaxy S4. I moved them to HDPI and it solved the problem.

like image 43
Muhammad Avatar answered Sep 28 '22 12:09

Muhammad


As mentioned by Muhammad, try moving your images in drawable(or MDPI) to a different dimension folder as HDPI or higher.

Always try to use compressed PNGs as far as possible. There are a lot of online sites that you can compress them in a very large scale.

reference: http://developer.android.com/guide/practices/screens_support.html

like image 23
Poornamith Avatar answered Sep 28 '22 11:09

Poornamith


As long as your images are not very large in size, you can use the drawable-nodpi folder for your PNGs. I can confirm this solved the issue for me.

like image 31
Suleiman19 Avatar answered Sep 28 '22 13:09

Suleiman19