How can I resize a picture before displaying it in a view with Android Universal Image Loader?

android, image-resizing, resize, universal-image-loader

Solution

Read Java docs attentively:

`Options.inSampleSize` of incoming options will NOT be considered. Library calculate the most appropriate sample size itself according to `imageScaleType(...)` options.

Also look into `ImageSizeUtil.defineTargetSizeForView(ImageView imageView, int maxImageWidth, int maxImageHeight)` which defines target size for image:

Size is defined by target view parameters, configuration parameters or device display dimensions. Size computing algorithm:

- Get the actual drawn `getWidth()` and `getHeight()` of the View. If view haven't drawn yet then go to step #2.

- Get `layout_width` and `layout_height`. If both of them haven't exact value then go to step #3.

- Get `maxWidth` and `maxHeight`. If both of them are not set then go to step #4.

- Get `maxImageWidth` param (maxImageWidthForMemoryCache) and `maxImageHeight` param (maxImageHeightForMemoryCache). If both of them are not set (equal 0) then go to step #5.

- Get device screen dimensions.

UIL defines result Bitmap size according to `imageScaleType` and `targetSize` (and `ImageView`'s scaleType).

Problem

I successfully applied the Universal Image Loader library (1.8.3 version) to my app, and I'm trying to resize the image before displaying it in the gridview item (because sometime image is too big to cache it in memory.) Here is what I am trying: ``` ... BitmapFactory.Options resizeOptions = new BitmapFactory.Options(); resizeOptions.inSampleSize = 3; // decrease size 3 times resizeOptions.inScaled = true; options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.blank) .showImageForEmptyUri(R.drawable.no_image) .cacheInMemory() .cacheOnDisc() .decodingOptions(resizeOptions) .build(); ... ``` This code doesn't make image 3 times smaller for some reason. Does someone have a better way to resize an image by exactly the specified density?

Original source