【问题标题】:Android: Glide not showing large image from URLAndroid:滑动不显示来自 URL 的大图像
【发布时间】:2017-03-27 01:24:14
【问题描述】:

我正在尝试将大型高分辨率 (3225x4800) 图像从 URL 加载到一家报纸公司的 glide 中。我要加载的图片是这个High Res Image

String url = "http://www.businessweekmindanao.com/content/wp-content/uploads/2015/10/fitness-and-wellness-poster-final.jpg";

Glide.with(getActivity()).load(url).asBitmap().into(new SimpleTarget<Bitmap>() {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
        imageView.setImageBitmap(resource);
    }
});

我正在使用此处提供的解决方案中的 Mike Ortiz 的 TouchImageView:https://github.com/MikeOrtiz/TouchImageView/issues/135 从 url 加载资源时。但它似乎只适用于小分辨率的图像,它不能加载高质量的图像。

我从 stackoverflow 尝试了另一种解决方案:Android: not displayed ImageView with UIL and TouchImageView,它试图修改 Mike 库的 onMeasure() 方法。它适用于:

Glide.with(getActivity()).load(url)
                .into(imageViewPreview);

问题是它以非常低的分辨率加载图像。

有没有办法加载高分辨率图像,例如:7480x3740,例如使用 Glide 和 TouchImageView?我该怎么做?

【问题讨论】:

  • 请计算内存中的字节数:7480x3740x4
  • 请把网址贴出来,让我们可以点击链接查看图片。
  • @greenapps 感谢您的评论。链接在字符串变量中:businessweekmindanao.com/content/wp-content/uploads/2015/10/…
  • The link was in the string variable:。不,那是网址。只有现在我可以点击。谢谢。但是你为什么不对那个计算做出反应呢?

标签: android android-glide touchimageview


【解决方案1】:

我找到了适合我要求的解决方案。 override() 方法可以解决问题。为目标分辨率设置更高的数字似乎是最终的解决方法,但数字越大,显示图像所需的时间就越长,因此实现预加载器/进度条是明智的。

Glide.with(getContext())
    .asBitMap() //[for new glide versions]
    .load(url)
    //.asBitmap()[for older glide versions]
    //.placeholder(R.drawable.default_placeholder)
    .override(1600, 1600) // Can be 2000, 2000
    .into(new BitmapImageViewTarget(imageViewPreview) {
        @Override
        public void onResourceReady(Bitmap  drawable, GlideAnimation anim) {
            super.onResourceReady(drawable, anim);
            progressBar.setVisibility(View.GONE);
        }
    });

relativeLayout xml 上的自定义居中预加载器/进度条占位符指示器:

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />

这很简洁,因为另一个与在 Glide 中加载图像 asBitmap() 相关的问题不会显示错误和预加载器/进度指示器的占位符:

Glide.with(getActivity())
    .load(url).asBitmap()
    .placeholder() //<== will simply not work:
    .error() // <== is also useless
    .into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
        imageView.setImageBitmap(resource);
    }
});

在我的研究中,我还尝试了毕加索的解决方案来处理高质量的图像:

Picasso.with(getContext())
                .load(url)
                .resize(1500, 0)
                .placeholder(R.drawable.default_placeholder)
                .error(R.drawable.download_error)
                .into(imageViewPreview);

最后,我对Glide 版本感到满意。

我希望这对可能面临同样挑战的人有所帮助。

【讨论】:

    【解决方案2】:

    我在使用 Glide 将图像从 url 加载到 TouchImageView 时遇到问题。它会显示一个黑屏。 我找到了一个像这样工作的修复程序。在 Glide 覆盖方法中传递宽度和高度,并在设置位图后调用 TouchImageView 的 setZoom 值为 1。

    完整代码如下:

    Glide.with('context')
                        .asBitmap()
                        .load('url')
                        .apply(new RequestOptions().override(1600, 1600)) //This is important 
                        .into(new BitmapImageViewTarget('imageview') {
                            @Override
                            public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                                super.onResourceReady(resource, transition);
                                'imageview'.setImageBitmap(resource);
                                'imageview'.setZoom(1); //This is important
                            }
                        });
    

    【讨论】:

    • setZoom(1) 未找到!
    • @ArnoldBrown 这是针对 TouchImageView 而不是 ImageView。我刚刚检查了这个 github.com/MikeOrtiz/TouchImageView 的 github repo,他们仍然有 setZoom 方法
    • 这对我有用,没有 .setZoom(1) 谢谢。但是我们为什么要应用代码?
    【解决方案3】:

    添加 android:usesCleartextTraffic="true"

    Glide 将开始在 android 10 中加载图片

    【讨论】:

    • 请说的具体一点,新人看不懂。在哪里添加这个标签?
    • 我们需要在清单文件中添加
    • 谢谢。将其添加到AndroidManifest.xml&lt;application 标签有效。但是你碰巧知道为什么这有效@EktaDushanj?
    • 基本上这使应用程序能够使用在 android-10 中默认被阻止的 HTTP 协议。如果您可以控制图像,更好的解决方案是 HTTPS。
    【解决方案4】:

    我有同样的问题,这是由于图像尺寸过大。通过以下方式解决:

        Glide
        .with(imageView.context)
        .load(url)
        .placeholder(R.drawable.placeholder)
        .apply(RequestOptions().transform(CenterCrop(), RoundedCorners(if (applyCorner) 32 else 1)))
        .into(object : CustomTarget<Drawable>(200, 200) {
            override fun onLoadCleared(placeholder: Drawable?) {
                // called when imageView is cleared. If you are referencing the bitmap
                // somewhere else too other than this imageView clear it here
            }
    
            override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
                imageView.setImageDrawable(resource)
            }
    

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      相关资源
      最近更新 更多