7

我成功地将通用图像加载器库(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();
...

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

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

4

3 回答 3

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. 获取maxImageWidth参数 (maxImageWidthForMemoryCache) 和maxImageHeight参数 (maxImageHeightForMemoryCache)。如果两者均未设置(等于 0),则转到步骤 #5。
  5. 获取设备屏幕尺寸。

UIL 根据imageScaleTypeand targetSize(and ImageView's scaleType) 定义结果位图大小。

于 2013-04-01T13:04:31.520 回答
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();
于 2014-09-12T07:09:36.587 回答
2

您可以在 xml 中设置 imageview 高度和 with。您的图像将完全适合上述高度和宽度。您下载的图像适合您的 xml 中提到的高度和宽度。

您也可以查看与您的问题类似的问题。

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

于 2013-04-01T11:16:09.897 回答