Android:Glide 不显示来自 URL 的大图
Android: Glide not showing large image from URL
我正在尝试将来自 URL 的大型高分辨率 (3225x4800) 图片加载到一家报业公司的 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);
}
});
我在从 url 加载资源时使用此处提供的解决方案中的 Mike Ortiz 的 TouchImageView:https://github.com/MikeOrtiz/TouchImageView/issues/135。但它似乎只适用于小分辨率图像,并且无法加载高质量图像。
我从 Whosebug 尝试了一个替代解决方案:Android: not displayed ImageView with UIL and TouchImageView 它试图修改 Mike 库的 onMeasure() 方法。适用于:
Glide.with(getActivity()).load(url)
.into(imageViewPreview);
问题是它以非常低的分辨率加载图像。
有没有办法使用 Glide 和 TouchImageView 加载高分辨率图像,例如:7480x3740?我该怎么做?
我找到了满足我要求的解决方案。 override() 方法可以解决问题。为目标分辨率设置更高的数字似乎是最终的解决方法,但数字越大,显示图像所需的时间就越长,因此实现 preloader/progressbar.
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 上的自定义居中 preloader/progressbar 占位符指示器 xml:
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
这很好,因为另一个与在 Glide 中加载图像 asBitmap() 相关的问题不会显示错误占位符和 preloader/progress 指示符:
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 解决方案来处理高质量图像:
Picasso.with(getContext())
.load(url)
.resize(1500, 0)
.placeholder(R.drawable.default_placeholder)
.error(R.drawable.download_error)
.into(imageViewPreview);
最后,我对 Glide 版本很满意。
我希望这对可能面临同样挑战的任何人有所帮助。
我在使用 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
}
});
添加android:usesCleartextTraffic="true"
Glide 将在 android10
后开始加载图片
我有同样的问题,这是由于图像尺寸过大。通过以下方式解决:
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)
}
我正在尝试将来自 URL 的大型高分辨率 (3225x4800) 图片加载到一家报业公司的 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);
}
});
我在从 url 加载资源时使用此处提供的解决方案中的 Mike Ortiz 的 TouchImageView:https://github.com/MikeOrtiz/TouchImageView/issues/135。但它似乎只适用于小分辨率图像,并且无法加载高质量图像。
我从 Whosebug 尝试了一个替代解决方案:Android: not displayed ImageView with UIL and TouchImageView 它试图修改 Mike 库的 onMeasure() 方法。适用于:
Glide.with(getActivity()).load(url)
.into(imageViewPreview);
问题是它以非常低的分辨率加载图像。
有没有办法使用 Glide 和 TouchImageView 加载高分辨率图像,例如:7480x3740?我该怎么做?
我找到了满足我要求的解决方案。 override() 方法可以解决问题。为目标分辨率设置更高的数字似乎是最终的解决方法,但数字越大,显示图像所需的时间就越长,因此实现 preloader/progressbar.
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 上的自定义居中 preloader/progressbar 占位符指示器 xml:
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
这很好,因为另一个与在 Glide 中加载图像 asBitmap() 相关的问题不会显示错误占位符和 preloader/progress 指示符:
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 解决方案来处理高质量图像:
Picasso.with(getContext())
.load(url)
.resize(1500, 0)
.placeholder(R.drawable.default_placeholder)
.error(R.drawable.download_error)
.into(imageViewPreview);
最后,我对 Glide 版本很满意。
我希望这对可能面临同样挑战的任何人有所帮助。
我在使用 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
}
});
添加android:usesCleartextTraffic="true"
Glide 将在 android10
后开始加载图片我有同样的问题,这是由于图像尺寸过大。通过以下方式解决:
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)
}