Android技术知识Android开发Android开发经验谈

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

2017-12-26  本文已影响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做的比较大的改变

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

//在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
但是对于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的改变和使用

上一篇下一篇

猜你喜欢

热点阅读