您的位置:首页 > 编程语言 > Go语言

Google推荐图片加载库Glide使用总结

2017-01-04 09:18 246 查看
 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app,以及Yelp app;

英文原文Introduction to Glide, Image Loader Library for Android, recommended by Google

github地址https://github.com/bumptech/glide

该库用法上和 Picasso 有很多相似的地方,目前能下载的版本是3.6.1,下面是这几天的学习,已经在公司的项目上替换,简单介绍下:

<code>添加依赖:</code>

dependencies {

compile'com.github.bumptech.glide:glide:3.6.1'

compile'com.android.support:support-v4:22.0.0'

}

Eclipse 开发的话可以直接下载Jar包

基本用法:

Glide.with(context).load(imageUrl).into(imageView); 

非常简单的流式代码,还有很多方法, 像

crossFade()默认动画,fitCenter(),placeholder()占位图,error()错误图,空图等可以自己试试;

这里的Glide.with() 不仅可以传 Context ,还可以传Activity 和 Fragment,因为图片加载会和Activity/Fragment的生命周期保持一致,比如Paused状态在暂停加载,在Resumed的时候又自动重新加载。

Glide 默认的图片格式是RGB_565,显示方面要差点,看的并不明显,当然可以自己修改为ARGB_8888,方法:

public class OkHttpGlideModule implements GlideModule {

public OkHttpGlideModule() {

}

public void applyOptions(Context context,GlideBuilder builder) {

builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

}

public void registerComponents(Context context,Glide glide) {

glide.register(GlideUrl.class,InputStream.class, newFactory());

}

}

同时在AndroidManifest.xml中将GlideModule定义为meta-data

android:name="com.bumptech.glide.integration.okhttp.OkHttpGlideModule"

android:value="GlideModule"/>

如果想用Okhttp做协议栈可以直接添加 glide-okhttp-integration-1.3.1.jar ,并且在Application 或Activity 的onCreate 方法注册就可以使用okhttp做为协议栈,Volley也是同理;

Glide.get(this).register(GlideUrl.class,InputStream.class,newOkHttpUrlLoader.Factory(newOkHttpClient()));

所以,要想使用ARGB_8888模式,又想Okhttp做协议栈,就不能用glide-okhttp-integration-1.3.1.jar,直接抽取里面的OkHttpGlideModule类然后,添加builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

用起来很简单,说下注意点吧:

1.placeholder() 占位图或者失败图都可以直接使用R.color.white 颜色来做;

2.如果加载不出来图片的话可以试试设置下图片的宽高;

3.图片的加载并不是全缓存,而是使用的imageview的大小来的,如果想要全缓存的就可以这样:

.diskCacheStrategy(DiskCacheStrategy.ALL)

4.图片加载背景会变成绿色,加载jpg图片会出现的BUG,github上给出解决方案

Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView); 或者

Glide.with(this).fromResource().asBitmap().encoder(newBitmapEncoder(Bitmap.CompressFormat.PNG,100)).load(R.drawable.testimg).into(imageView);

5.圆形图片我用的是V4包自带的处理方式:

Glide.with(context).load(imageUrl).asBitmap().fitCenter().diskCacheStrategy(DiskCacheStrategy.SOURCE)

.placeholder(R.drawable.shape_glide_round_place).error(R.drawable.no_face_circle)

.into(newBitmapImageViewTarget(imageView) {

@Override

protected voidsetResource(Bitmap resource) {

RoundedBitmapDrawable circularBitmapDrawable =

RoundedBitmapDrawableFactory.create(context.getResources(),resource);

circularBitmapDrawable.setCircular(true);

imageView.setImageDrawable(circularBitmapDrawable);

}

});

6.本地图的加载可以

Glide.with(context).load(newFile(filePath)) 也可以直接load("/mnt/本地图片");

7.默认的动画可以取消掉,加上dontAnimate()

8.清除缓存:

Glide.get(this).clearMemory();

Glide.get(this).clearDiskCache(); 需要在子线程执行

9.加载暂时不支持显示进度,可以用占位图来显示,把占位图替换成帧动画, 如果一定要显示数字进度,可以配合Okhttp协议栈来处理,

参考该例子:https://github.com/futurobot/Glide-Download-Progress-Interceptor

最后放张效果图,该图片转自www.open-open.com/lib/view/open1438154211785.html

```里面介绍几个方法可以使图片加载更快,包括预加载方式,ListPreloader类的使用;```



原文链接:http://www.jianshu.com/p/914699e49050
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 图片