首页 文章

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

提问于
浏览
1

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

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

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

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

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

2 回答

  • 0

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

    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

    使用Glide 4.X您可以简单地调用 .thumbnail("quality you want to load") ,您不需要为单个图像维护2个URL .

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

    希望它会对你有所帮助 .

相关问题