Android:Glide无法显示网址中的大图

OBL*_*OBL 6 android touchimageview android-glide

我正在尝试将大型的高分辨率(3225x4800)图片从URL加载到一家报纸公司的幻灯片中。我要加载的图像是此高分辨率图像

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);
    }
});
Run Code Online (Sandbox Code Playgroud)

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

我从stackoverflow中尝试了另一种解决方案:Android:未显示带有UIL和TouchImageView的ImageView,它试图修改Mike的库的onMeasure()方法。它适用于:

Glide.with(getActivity()).load(url)
                .into(imageViewPreview);
Run Code Online (Sandbox Code Playgroud)

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

有没有办法加载像Glide和TouchImageView这样的高分辨率图像:7480x3740?我怎么做?

OBL*_*OBL 7

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

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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

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

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />
Run Code Online (Sandbox Code Playgroud)

这很干净,因为与在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);
    }
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

我希望这将对可能面临相同挑战的任何人有所帮助。