美文网首页
Google推荐图片加载库Glide使用总结

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

作者: 飞碟_ | 来源:发表于2016-01-15 17:51 被阅读8780次

     在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫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,下面是这几天的学习,已经在公司的项目上替换,简单介绍下:

    添加依赖:


    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类的使用;```

    相关文章

      网友评论

          本文标题:Google推荐图片加载库Glide使用总结

          本文链接:https://www.haomeiwen.com/subject/oyuhkttx.html