美文网首页Android技术知识Android开发Android开发经验谈
Glide图片加载库从v3迁移到v4的改变和使用

Glide图片加载库从v3迁移到v4的改变和使用

作者: 芒果味的你呀 | 来源:发表于2017-12-26 19:56 被阅读777次

    1.关于配置

    app/builde.gradle

    dependencies {
        compile 'com.github.bumptech.glide:glide:4.4.0'
        annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'
    }
    

    Project:build.gradle

    repositories {
      mavenCentral()
      maven { url 'https://maven.google.com' }
    }
    

    如果需要混淆配置看这里

    2.基本用法:加载三步走

    Glide.with(this)
        .load(myUrl)
        .into(imageView);
    

    3.V3迁移到V4做的比较大的改变

    • 在V3版本,选项由一系列复杂的异构建造者(multityped builders)单独处理。比如BitmapRequestBuilder、DrawableRequestBuilder、GifRequestBuilder等。但是Glide v4 中,由一个单一类型的唯一一个建造者接管一系列选项对象,即RequestBuilder

    在 Glide v4 版本中,只存在一个RequestBuilder对应一个你正在试图加载的【类型】(Bitmap 、Drawable、GifDrawable等)。RequestBuilder可以直接访问对这个加载过程有影响的选项,包括你想加载的【数据模型】(url, uri、file等),可能存在的【略缩图】请求,以及任何的【监听器】,也是使用【into】开始加载的地方。

    • 在V3版本,我们通常会把许多选项在load和into之间,以流式API的形式串联起来,比如
    //在v3版本
    Glide.with(this)
         .load(url)
         .placeholder(R.drawable.loading)
         .error(R.drawable.error)
         .diskCacheStrategy(DiskCacheStrategy.NONE)
         .override(100, 100)
         .into(imageView);
    placeholder方法指定占位图
    error方法指定异常占位图
    diskCacheStrategy磁盘缓存策略
    override指定图片大小
    我们也可以在中间指定图片格式asBitmap()或者asGif()
    或者指定图片展示类型centerCrop()等
    
    对于这些API,在V4上大部分选项被移动到了一个单独的称为 RequestOptions 的对象中。RequestOptions 允许你一次指定一系列的选项,然后对多个加载重用它们:
    RequestOptions options = new RequestOptions()
        .centerCrop()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH);
    
    RequestOptions myOptions = new RequestOptions()
        .fitCenter()
        .override(100, 100);
    
    Glide.with(fragment)
        .load(url)
        .apply(myOptions)
        .into(drawableView);
    
    Glide.with(fragment)
        .asBitmap()
        .apply(myOptions)
        .load(url)
        .into(bitmapView);
    
    • 变换,对于V3版本,对应不同的变化有不同的类,
    v3
    但是对于V4版本来说,Glide v4 里的Transformations 现在会替换之前设置的任何变换。在 Glide v4 中,如果你想应用超过一个的Transformation,你需要使用transforms()方法,使用实例:
    Glide.with(fragment)
      .load(url)
      .apply(new RequestOptions().transforms(new CenterCrop(), new RoundedCorners(20)))
      .into(target);
    

    在这里我只提出几个重要的改变,还有其它的,比如过渡动画等,点击这个链接查找从v3迁移到v4

    4.Generated API

    如果我们还是想要像v3一样使用流式api,而不是每次要new RequestOptions等,不需要手动在调用apply。Glide 现在也提供了一套可以为应用定制化生成的 API。应用可以通过包含一个标记了 AppGlideModule的实现来访问生成的 API。如果你不了解这是怎么工作的,可以查看 Generated API
    【如何配置Generated API】:
    1.在 Application 模块中,创建一个新类 MyAppGlideModule

    这个类的特点是有 @GlideModule 注解,继承自 AppGlideModule。
    此类可生成出一个流式 API,内联了多种选项,和集成库中自定义的选项:

    import com.bumptech.glide.annotation.GlideModule;
    import com.bumptech.glide.module.AppGlideModule;
    
    @GlideModule
    public final class MyAppGlideModule extends AppGlideModule {}
    
    2.生成的 API 默认名为GlideApp,与AppGlideModule的子类包名相同。在 Application 模块中将Glide.with()替换为GlideApp.with(),即可使用该 API 去完成加载工作。
    在没有使用 Generated API 时,请求大概长这样: 
    Glide.with(fragment)
        .load(url)
        .apply(centerCropTransform()
            .placeholder(R.drawable.placeholder)
            .error(R.drawable.error)
            .priority(Priority.HIGH))
        .into(imageView);
    使用 Generated API,RequestOptions 的调用可以被内联:
    
    GlideApp.with(fragment)
        .load(url)
        .centerCrop()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH)
        .into(imageView);
    
    使用Generated API,还是可以使用生成的 RequestOptions 子类来应用相同的选项到多次加载中;但生成的 RequestBuilder 子类可能在多数情况下更为方便。

    5.列举一些使用实例:

    在v3版本,对于圆角和圆形图片我们是需要自定义Transformation的,但是v4已经帮我们封装好直接使用了。这点看之前总结的文章有提到Android加载圆角图片、圆形图片的三种方式
    • 圆角实现

    GlideApp.with(context)
             .load(url)
             .transform(new RoundedCorners(20)) //此处为圆角px值
             .into(iv);
    
    • 圆形实现

      GlideApp.with(context)
                .load(TextUtils.isEmpty(url)?url:new MyGlideUrl(url))
                .transform(new CircleCrop(context))
                .into(iv);
    
    • 占位符

    Placeholder 请求图片加载中
    Error 请求图片加载错误
    Fallback 请求url/model为空

    GlideApp.with(fragment)
      .load(url)
      .placeholder(R.drawable.placeholder) 
      .error(new ColorDrawable(Color.RED))
      .fallback(new ColorDrawable(Color.GREY))
      .into(view);
    

    6.写到最后,文章只是挑了一点经典的常用的改变,不会面面俱到,如果没有你需要的,可以查看官网给出的文档查阅学习:点这里

    关于Glide系列的其他文章:

    Glide源码分析流程思维导图
    【两篇就懂系列】Glide源码分析之加载图片流程(1/2)
    【两篇就懂系列】Glide源码分析之加载图片流程(2/2)
    【一篇就懂系列】Glide源码分析之缓存处理
    Glide图片加载库从v3迁移到v4的改变和使用

    相关文章

      网友评论

        本文标题:Glide图片加载库从v3迁移到v4的改变和使用

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