Glide 使用详解
来源:互联网 发布:ubuntu镜像文件 光盘 编辑:程序博客网 时间:2024/05/14 01:03
今天简单把Glide 使用的各种场景总结一下,加载中可能出现的问题,加载显示圆形图片以及加载Gif 图片 。
Glide GitHub 源码地址:
https://github.com/bumptech/glide
在Android Studio 加入依赖包:
dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:19.1.0'}
简单加载图片:
Glide <strong><span style="color:#ff0000;"> .with(context)</span></strong> .load(url) .centerCrop() .placeholder(R.drawable.xxx) .crossFade() .into(myImageView);
context 可以是activity,也可以是 Application 的context ,个人推荐最好使用 Application 的 context ,以前项目组使用 activity ,和 recyclerview 结合使用的时候出现过 下拉显示异常问题。就是加载了20张 Item 图片,然后 滑倒底部再上滑的时候 上面显示过的图片就不显示了。没有找到造成的具体原因,改成Application的context就没有这种现象了。
如果要使用 Glide 加载中的 Bitmap 可以使用BitmapImageViewTarget 。
Glide.with(Application.getInstance()) .load(imgurl) .asBitmap() .placeholder(R.drawable.image_offer_default) .into(new BitmapImageViewTarget(ImageView) { @Override protected void setResource(final Bitmap resource) { } });
使用Glide 显示圆形图片
<span style="font-size:14px;"> Glide.with(context).load(url).asBitmap().centerCrop().into(new BitmapImageViewTarget(imageView) { @Override protected void setResource(Bitmap resource) { RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource); circularBitmapDrawable.setCircular(true); imageView.setImageDrawable(circularBitmapDrawable); } });</span>
Glide.with(this).load(url).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
Glide.with(this).load("url").diskCacheStrategy(DiskCacheStrategy.SOURCE).into(new GlideDrawableImageViewTarget(iv, 1));
有时候图片第一次加载的时候只显示占位图,第二次才显示正常的图片解决办法:
方案一: 不设置占位;
方案二:使用Glide的Transformation API自定义圆形Bitmap的转换。这里是一个已有的例子;
方案三:使用下面的代码加载图片:
Glide.with(mContext) .load(url) .placeholder(R.drawable.loading_spinner) .into(new SimpleTarget<Bitmap>(width, height) { @Override public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { // setImageBitmap(bitmap) on CircleImageView } });该方法在listview上复用有问题的bug,如果在listview中加载CircleImageView,请不要使用该方法。
方案四:不使用Glide的默认动画:
Glide.with(mContext) .load(url) .dontAnimate() .placeholder(R.drawable.loading_spinner) .into(circleImageview);
不要再非主线程里面使用Glide加载图片,如果真的使用了,请把context参数换成getApplicationContext。更多的细节请参考这个issue。
不能给加载的图片setTag() ???
方案一:使用setTag(int,object)方法设置tag,具体用法如下:
Glide.with(context).load(urls.get(i).getUrl()).fitCenter().into(imageViewHolder.image); imageViewHolder.image.setTag(R.id.image_tag, i); imageViewHolder.image.setOnClickListener(new View.OnClickListener() { @Override int position = (int) v.getTag(R.id.image_tag); Toast.makeText(context, urls.get(position).getWho(), Toast.LENGTH_SHORT).show(); } });
同时在values文件夹下新建ids.xml,添加
<item name="image_tag" type="id"/>
方案二:从Glide的3.6.0之后,新添加了全局设置的方法。具体方法如下:
先实现GlideMoudle接口,全局设置ViewTaget的tagId:
public class MyGlideMoudle implements GlideModule{ @Override public void applyOptions(Context context, GlideBuilder builder) { ViewTarget.setTagId(R.id.glide_tag_id); } @Override public void registerComponents(Context context, Glide glide) { }}同样,也需要在ids.xml下添加id
<item name="glide_tag_id" type="id"/>
最后在 Manifest 中添加
<meta-data
android:name="com.yourpackagename.MyGlideMoudle"
android:value="GlideModule" />
一些使用技巧
1.Glide.with(context).resumeRequests()和 Glide.with(context).pauseRequests()
当列表在滑动的时候,调用pauseRequests()取消请求,滑动停止时,调用resumeRequests()恢复请求。这样是不是会好些呢?
2.Glide.clear()
当你想清除掉所有的图片加载请求时,这个方法可以帮助到你。
3.ListPreloader
如果你想让列表预加载的话,不妨试一下ListPreloader这个类。
加入了缓存策略,缓存策略有四种如下:
/** Caches with both {@link #SOURCE} and {@link #RESULT}. */
ALL(true, true),
/** Saves no data to cache. */
NONE(false, false),
/** Saves just the original data to cache. */
SOURCE(true, false),
/** Saves the media item after all transformations to cache. */
RESULT(false, true);
ALL和RESULT的缓存策略不可以,NONE是不缓存数据,SOURCE是缓存原型,原图。加上了如上的缓存策略就解决了很慢或者有时加载不出gif图的问题了。
其他优秀的加载图片库还有
Universal Image Loader:
https://github.com/nostra13/Android-Universal-Image-Loader
Picasso: Square出品
https://github.com/square/picasso
Fresco:Facebook
http://www.fresco-cn.org/
- Glide使用详解
- Glide 使用详解
- Glide的使用详解
- Glide使用详解
- Glide使用详解
- Glide使用详解
- glide使用详解
- Glide使用详解
- Glide使用详解
- Glide使用详解
- Android Glide使用详解
- Glide使用详解
- Glide的使用详解
- Glide使用详解
- android Glide使用详解
- Glide使用详解(一)
- Glide使用详解(二)
- Glide使用详解(一)
- (c#)AutoCAD二次开发调试时,netload后,输入命令,却显示为未知命令
- httpurlconnection_get_post
- 为什么http用的时候不能用POST方式替代全部的GET方式?
- elasticsearch加字段
- BCP使用
- Glide 使用详解
- OSX为系统自带的PHP编译GD支持freetype
- component-scan
- cocos2d-objc的配置使用
- Statement中executeQuery、executeUpdate 和 execute的使用方法
- photoshop颜色混合
- Android应用中OOM问题剖析和解决方案
- 课时40|封装-封装的概念,UML类图
- android 可滑动组件互相嵌套时滑动冲突解决方案总结