Android:Glide没有显示来自网址的大图片

时间:2016-11-13 06:35:14

标签: android android-glide touchimageview

我试图将一个大型高分辨率(3225x4800)图像从URL加载到报纸公司的滑行中。我想加载的图片是High Res Image

public framo()
{
setLayout(new FlowLayout());
Panel panel=new Panel();
Button btn=new Button("press");
panel.add(btn);
}

public static void main(String args[])
{
framo F=new framo();
}

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

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

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);
    }
});

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

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

4 个答案:

答案 0 :(得分:4)

我找到了符合我要求的解决方案。 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版本感到满意。

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

答案 1 :(得分: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
                        }
                    });

答案 2 :(得分:0)

添加android:usesCleartextTraffic =“ true”

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

答案 3 :(得分:0)

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

    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)
        }