如何在使用Android Universal Image Loader在视图中显示图片之前调整图片大小?

我成功地将通用图像加载程序库(1.8.3版本)应用于我的应用程序,我试图在显示图像之前调整图像大小(因为有时图像太大而无法在内存中caching)。

这是我正在尝试的:

... 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(); ... 

由于某些原因,此代码不会使图像缩小3倍。

有人有一个更好的方式来调整图像的大小确切的密度?

仔细阅读Java文档:

不会考虑传入选项的Options.inSampleSize 。 库根据imageScaleType(...)选项计算最合适的样本大小本身。

另外看看ImageSizeUtil.defineTargetSizeForView(ImageView imageView, int maxImageWidth, int maxImageHeight) ,它定义了图像的目标大小:

尺寸由目标视图参数,configuration参数或设备显示尺寸定义。 大小计算algorithm:

  1. 获取View的实际绘制的getWidth()getHeight() 。 如果视图尚未绘制,则转到步骤#2。
  2. 获取layout_widthlayout_height 。 如果他们都没有确切的价值,那么去第3步。
  3. 获取maxWidthmaxHeight 。 如果两者都没有设置,则转到步骤#4。
  4. 获取maxImageWidth参数(maxImageWidthForMemoryCache)和maxImageHeight参数(maxImageHeightForMemoryCache)。 如果两者都没有设置(等于0),则转到步骤#5。
  5. 获取设备屏幕尺寸。

UIL根据imageScaleTypetargetSize (和ImageView的scaleType)定义结果位图大小。

试试这个:

 options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.blank) .showImageForEmptyUri(R.drawable.no_image) .cacheInMemory() .cacheOnDisc() .decodingOptions(resizeOptions) .postProcessor(new BitmapProcessor() { @Override public Bitmap process(Bitmap bmp) { return Bitmap.createScaledBitmap(bmp, 300, 300, false); } }) .build(); 

您可以在xml中设置imageview的高度。 你的形象将完全符合提到的高度和宽度。 您下载的图像适合您在xml中提到的高度和宽度。

你也可以看看和你类似的问题。

https://github.com/nostra13/Android-Universal-Image-Loader/issues/183