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

Joh*_*n F 7 android resize image-resizing universal-image-loader

我成功地将通用图像加载程序库(1.8.3版本)应用到我的应用程序,我正在尝试调整图像大小,然后在gridview项目中显示它(因为有时图像太大而无法将其缓存在内存中.)

这是我正在尝试的:

...
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();
...
Run Code Online (Sandbox Code Playgroud)

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

有人有更好的方法来按照指定的密度调整图像大小吗?

nos*_*a13 22

认真阅读Java文档:

Options.inSampleSize传入期权将不予考虑.库根据imageScaleType(...)选项计算最合适的样本大小.

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

大小由目标视图参数,配置参数或设备显示尺寸定义.大小计算算法:

  1. 获取实际绘制的getWidth()getHeight()视图.如果尚未绘制视图,请转到步骤#2.
  2. 得到layout_widthlayout_height.如果它们都没有确切的值,那么转到步骤#3.
  3. 得到maxWidthmaxHeight.如果未设置它们,则转到步骤#4.
  4. 获取maxImageWidthparam(maxImageWidthForMemoryCache)和maxImageHeightparam(maxImageHeightForMemoryCache).如果两者都未设置(等于0),则转到步骤#5.
  5. 获取设备屏幕尺寸.

UIL根据imageScaleTypetargetSize(以及ImageView'scaleType)定义结果位图大小.


小智 14

试试这个:

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();
Run Code Online (Sandbox Code Playgroud)