从 url 加载图像的高效且快速的方法

dud*_*ded 2 android image firebase android-glide firebase-storage

我正在开发一个应用程序,需要从其网址加载多个图像。我将所有图像保存在 firebase 存储中。我目前正在使用压缩器来减小尺寸。

 newImageFile=new File(uri1.getPath());
                    try {
                        compressedImageFile = new Compressor(ProductAdd.this)

                                .compressToBitmap(newImageFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                     baos = new ByteArrayOutputStream();
                    compressedImageFile.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                     thumbData1 = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

我使用 Glide 从 url 加载图像

Glide.with(context).load(imgUrl).into(holder.cutImg);
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以改进以更快地加载图像。也许以特定的格式存储它们。

Kas*_*rma 8

您可以在加载原始图像之前将原始图像的缩略图加载到 ImageView 中。

Glide.with(fragment)
  .load(url)
  .thumbnail(0.05f)
  .into(imageView);
Run Code Online (Sandbox Code Playgroud)

这会将原始图像 5% 的质量加载到视图中,当完整图像加载时,它将被替换。

如果您有一个单独的缩略图 URL,那么

Glide.with(fragment)
  .load(url)
  .thumbnail(
    Glide.with(fragment)
      .load(thumbnailUrl))
  .into(imageView);
Run Code Online (Sandbox Code Playgroud)

现在,当图像加载时,它将立即加载到视图中,在这里您可以使用过渡来获得平滑的效果。

Glide.with(fragment)
    .load(url)
    .thumbnail(0.05f)
    .transition(DrawableTransitionOptions.withCrossFade())
    .into(view);
Run Code Online (Sandbox Code Playgroud)

您可以查看我的项目,其中我首先压缩图像并将缩略图存储到 Firebase Storage,然后加载它。

你也可以尝试不同的,DiskCacheStrategies但我建议使用默认的,它工作得很好!

以下是各种 DiskCacheStrategies:

.diskCacheStrategy(DiskCacheStrategy.ALL)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
Run Code Online (Sandbox Code Playgroud)