[置顶] Glide 使用问题汇总———2017/06/12更新
来源:互联网 发布:最新软件开发方法 编辑:程序博客网 时间:2024/06/06 19:34
http://blog.csdn.net/qq569699973/article/details/52712615?locationNum=10
GitHub开源地址
使用Glide加载Gif和常见图片格式时出现的常见问题:
一、离线缓存策略的配置
- .diskCacheStrategy(DiskCacheStrategy.ALL)
如下几种:
-
- ALL(true, true),
-
- NONE(false, false),
-
- SOURCE(true, false),
-
- RESULT(false, true);
二、图片加载的监听方法
- Glide.with(this).load(advertisementBean.getImageUrl()).diskCacheStrategy(DiskCacheStrategy.ALL).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) {
- Times(TIME_OUT);
- tv_countdown.setVisibility(View.VISIBLE);
- return false;
- }
- }).into(iv_advert_img);
问题:当外层的View的Visibility属性GONE时,OnResourceReady方法体内部分代码不会被执行
这是作者给的解释:
Glide加载图片 into到ImageView中,必须要知道ImageView的宽、高,他才能知道怎么加载图片,所以监听加载过程时要确保ImageView不是GONE,否则你会发现OnResourceReady方法体内的部分代码永远不被执行...
Update 16-10-20
case:
服务器返回图片 url Glide 无法加载,Glide 是不会走onResourceReady,而是直接走onException,所以在onResourceReady做的相关操作,在onException的时候也要在方法体内做好对应的处理。
Update 16-12-02
自定义圆形占位图及使用ImageView+GLide加载圆形图片
- Glide.with(ctx).load(TaskBeanNew.getBusinessImg()).asBitmap().placeholder(R.drawable.defult_head).centerCrop().into(new BitmapImageViewTarget(viewHolder.img_icon) {
- @Override
- protected void setResource(Bitmap resource) {
- RoundedBitmapDrawable circularBitmapDrawable =
- RoundedBitmapDrawableFactory.create(ctx.getResources(), resource);
-
-
-
- circularBitmapDrawable.setCircular(true);
- viewHolder.img_icon.setImageDrawable(circularBitmapDrawable);
- }
-
-
- @Override
- public void onLoadStarted(Drawable placeholder) {
-
-
-
-
- RoundedBitmapDrawable circularBitmapDrawable =
- RoundedBitmapDrawableFactory.create(ctx.getResources(), ((BitmapDrawable) placeholder).getBitmap());
- circularBitmapDrawable.setCircular(true);
- viewHolder.img_icon.setImageDrawable(circularBitmapDrawable);
- }
-
- @Override
- public void onLoadFailed(Exception e, Drawable errorDrawable) {
-
-
-
-
- RoundedBitmapDrawable circularBitmapDrawable =
- RoundedBitmapDrawableFactory.create(ctx.getResources(), ((BitmapDrawable) errorDrawable).getBitmap());
- circularBitmapDrawable.setCircular(true);
- viewHolder.img_icon.setImageDrawable(circularBitmapDrawable);
- }
- });
Update 17-03-08
代码如下:
- public void loadRoundImage(final Context mContext, String url, final ImageView mImageView, int placeHolderResourceId) {
- if (null == mContext)
- return;
- Glide.with(mContext).load(url).asBitmap().placeholder(placeHolderResourceId).centerCrop().into(new BitmapImageViewTarget(mImageView) {
- @Override
- protected void setResource(Bitmap resource) {
- RoundedBitmapDrawable circularBitmapDrawable =
- RoundedBitmapDrawableFactory.create(mContext.getResources(), resource);
- circularBitmapDrawable.setCircular(true);
- mImageView.setImageDrawable(circularBitmapDrawable);
- }
-
-
- @Override
- public void onLoadStarted(Drawable placeholder) {
-
- RoundedBitmapDrawable circularBitmapDrawable =
- RoundedBitmapDrawableFactory.create(mContext.getResources(), ((BitmapDrawable) placeholder).getBitmap());
- circularBitmapDrawable.setCircular(true);
- mImageView.setImageDrawable(circularBitmapDrawable);
- }
-
-
- @Override
- public void onLoadFailed(Exception e, Drawable errorDrawable) {
- super.onLoadFailed(e, errorDrawable);
- RoundedBitmapDrawable circularBitmapDrawable =
- RoundedBitmapDrawableFactory.create(mContext.getResources(), ((BitmapDrawable) errorDrawable).getBitmap());
- circularBitmapDrawable.setCircular(true);
- mImageView.setImageDrawable(circularBitmapDrawable);
- }
- });
- }
自定义圆形图片,占位图,错误图;
问题:
部分图片加载失败后 onLoadFailed 会重复走多次,且Exception 为 null,询问作者,但是没有给予答复,原因尚不明
解决办法
Glide.with(mContext) 使用的上下文采用Application的上下文 Glide.with(mContext.getApplicationContext()) 解决;
17/06/12
问题:
加载大分辨率图片时,ImageView的scaleType设置不当,导致使用Glide时出现OOM
解决办法
ImageView的scaleType的问题,当设置为fitXY时,虽然ImageView显示那么点尺寸,但是,但是Glide加载图片时,却是以全分辨率加载的,于是加载几张,就OOM了。
改成fitCenter或者centerCrop(试了一下fitStart、fitEnd也行,总之看需求了),就好了,会自动缓存小图,滚动起来也非常流畅。