android - 从 url 加载图像的高效和快速方法

标签 android image firebase firebase-storage android-glide

我正在开发一个需要从其网址加载多个图像的应用程序。我将所有图像保存在 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();

我使用 Glide 从 url 加载图像

Glide.with(context).load(imgUrl).into(holder.cutImg);

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

最佳答案

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

Glide.with(fragment)
  .load(url)
  .thumbnail(0.05f)
  .into(imageView);

这会将原始图像的 5% 质量加载到 View 中,并在加载完整图像时将其替换。

如果您有单独的缩略图 URL

Glide.with(fragment)
  .load(url)
  .thumbnail(
    Glide.with(fragment)
      .load(thumbnailUrl))
  .into(imageView);

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

Glide.with(fragment)
    .load(url)
    .thumbnail(0.05f)
    .transition(DrawableTransitionOptions.withCrossFade())
    .into(view);

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

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

这里有各种DiskCacheStrategies:

.diskCacheStrategy(DiskCacheStrategy.ALL)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)

关于android - 从 url 加载图像的高效和快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330782/

相关文章:

javascript - 查询两个临近日期且 Firestore 不起作用

Android wifi热点客户端连接事件

android - Tesseract 返回非英文字符

python - cv2.merge((r,g,b)) 是如何工作的?

显示图像的 PHP 脚本很慢

ios - 如何在Swift 5中验证用户的时间是正确的并且没有欺骗应用程序?

android - GoogleSignInAccount 未登录

android - 如何从 Google Play 商店中删除已发布的应用程序?

java - Android获取ImageButton的背景资源

java - FirebaseListAdapter 未 populateView 未被调用