加载较小分辨率的图像,直到更大的分辨率图像下载

时间:2017-11-19 18:22:24

标签: android image firebase-storage android-glide

我正在使用Firebase存储,实时数据库构建Android应用程序,几乎所有内容。该应用程序将允许用户上传图像,其他用户可以查看这些图像。目前我正在使用插件来调整图像大小并裁剪图像,然后在Firebase存储桶中存储该图像的800x800分辨率版本,这就是其他用户所看到的。它运行良好,但我想删除800x800分辨率限制,以便具有高分辨率的设备的用户可以看到更高质量的图像。问题是,我无法弄清楚最佳流程是什么。 目前,我使用Glide库来处理从firebase存储中获取downloadURL后加载图像。我想做的是允许应用程序加载图像的低分辨率版本,例如当用户首次将图像滚动到视图中时,它会快速将小的200x200分辨率图像加载到视图中,但随后加载后台的全尺寸分辨率。一旦完成全分辨率下载,它将用低分辨率的分辨率替换为低分辨率的分辨率。

我已经看过像Instagram这样的应用程序,如果用户上传了一个非常高质量的图像,当你第一次将该帖子滚动到视图中时,图片会像素化并且不是很好,但是在一秒或2之后图像真的很高品质。 我可以使用Firebase函数处理支持的逻辑,以便在上传图像后调整图像大小并存储2种不同的分辨率。我真的卡在它的加载端。我搜索,搜索和搜索,我真的找不到它。有很多关于你为什么要这样做的文章,但是我找不到任何关于如何实际完成这项任务的真实例子。

目前,我的图片以极其简单的文档推荐方式加载......

Glide.with(this).load(imageURL).into(imageView);

我真的可以使用一些帮助来解决如何首先加载低分辨率图像,然后在项目处于视图中一秒钟后再加载高分辨率图像。谢谢。

4 个答案:

答案 0 :(得分:1)

您可以先加载低分辨率,因为您知道它会相当快,然后在加载低分辨率图像后加载高分辨率图像。

Glide.with(this)
 .load(lowResImageUrl)
 .listener(new RequestListener<String, GlideDrawable>() {
     @Override
     public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
         return false;
     }

     @Override
     public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
         Glide.with(yourContext).load(highResImage).into(imageView);
         return false;
     }
 })
 .into(imageView)

答案 1 :(得分:0)

使用Glide 4.X 您只需拨打.thumbnail("quality you want to load")即可 您不需要为单张图片维护2个网址。

GlideApp.with(context).load("High resolution image URL")
                    .placeholder(R.drawable.placeholder)
                    .thumbnail(0.3f) //Quality 0.1 - 1.0
                    .into(imageHolder);

希望它会对你有所帮助。

答案 2 :(得分:0)

从Glide 4.0开始,有一种本地方法可以执行此操作,称为“缩略图请求”。

您可以这样制作:

box1.material.userData.originalColor = new THREE.Color( 0xffffff );

// later when you want to perform the reset

box1.material.color.copy( box1.material.userData.originalColor );

official Glide documentation中的更多信息。

答案 3 :(得分:0)

如果您使用 Kotlin,我建议您使用 Coin 库而不是 glide。

https://github.com/coil-kt/coil

它很轻巧,开箱即用,可以满足您的需求。 即:生成较低分辨率的图像,直到整个图像在内存中