Logic
Logic

Reputation: 2258

Using higher density images for lower resolution devices

I'm using Images only of the resolution xxhdpi to reduce the size of apk

If I run my app in xxhdpi device, its fine.

When I run my app in hdpi device it is responding very slowly.

Is this time being taken to render xxhdpi image in hdpi ??

Is this a correct procedure to use ??

Upvotes: 0

Views: 60

Answers (1)

Kashif Anwaar
Kashif Anwaar

Reputation: 798

No that's not correct procedure, it is slow, sometimes it may also kill your app saying MemoryOutOfException etc...

You've to programmatically decode and downgrade the image using BitmapFactory

For example

//decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f){
    try {
        //decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        //Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE=70;
        int width_tmp=o.outWidth, height_tmp=o.outHeight;
        int scale=1;
        while(!(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)){
            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;
}

Upvotes: 2

Related Questions