Android - Glide4.0+ 简单使用

由于项目使用到了Glide4.0+强大的图片加载库,深入理解一下Glide4.0+。
Glide4.0+地址

一、引入

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

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

注意:这里可能会产生一个依赖(Support Library Version)重复的坑。

Glide对Android SDK进行了要求。minSdkVersion >= 14
compileSdkVersion 需要使用API 27(Oreo)或者更高的sdk版本来编译
Support Library Version - Glide 使用的支持库版本为 27。如需使用不同于v27的库,可以通过下面的方式:

dependencies {
  implementation ("com.github.bumptech.glide:glide:4.6.1") {
    exclude group: "com.android.support"
  }
  implementation "com.android.support:support-fragment:26.1.0"
}

二、简单使用

1,链式调用
在项目中新建一个java类,添加@GlideModule 和继承AppGlideModule(如下),

@GlideModule
public class MyGlide4 extends AppGlideModule {

}

就可以使用GlideApp的链式调用:

GlideApp.with(content)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);

2,占位符
Glide的占位符分为以下三种:

  • 占位符(Placeholder):请求过程中显示
    占位符是当请求正在执行时被展示的 Drawable 。当请求成功完成时,占位符会被请求到的资源替换。
GlideApp.with(context)
  .load(url)
  .placeholder(new ColorDrawable(Color.BLACK))//接收Drawable 和 @DrawableRes int id两种类型
  .into(view);
  • 错误符(Error):请求失败时显示。
    error Drawable 在请求永久性失败时展示。error Drawable 同样也在请求的url/model为 null ,且并没有设置 fallback Drawable 时展示。
GlideApp.with(this)
    .load(movieDetailBean.getImages().getSmall())
    .placeholder(R.drawable.ic_image_fail)
    .error(R.drawable.ic_image_fail)
    .into(mMovieDetailTopIv);

在Glide4.3+版本,可以使用errorAPI,通过一个新RequestBuilder
的进行失败后的重新加载
例如:请求url,失败后加载failUrl

GlideApp.with(context)
  .load(url)
  .error(Glide.with(fragment)
      .load(failUrl))//失败后,重新加载
  .into(imageView);

注:如果主的请求成功,该error不会执行,如果指定缩略图thumbnail,即便缩略图请求成功(主请求未成功),也会执行error

  • 后备回调符(Fallback)

fallback Drawable 在请求的url/model为 null 时展示。设计 fallback Drawable 的主要目的是允许用户指示 null 是否为可接受的正常情况。例如,一个 null 的个人资料 url 可能暗示这个用户没有设置头像,因此应该使用默认头像。然而,null 也可能表明这个元数据根本就是不合法的,或者取不到。 默认情况下Glide将 null 作为错误处理,所以可以接受 null 的应用应当显式地设置一个 fallback Drawable

GlideApp.with(fragment)
  .load(url)
  .fallback(new ColorDrawable(Color.GREY))
  .into(view);

3,过渡选项
TransitionOptions 用于决定你的加载完成时会发生什么。
使用 TransitionOption 可以应用以下变换(如果不使用的话,从占位符(Placeholder)会直接跳转到下个要显示的图像):

  • View淡入
  • 与占位符交叉淡入

例如:淡入变换

GlideApp.with(this)
 .load(movieDetailBean.getImages().getSmall())
 .transition(withCrossFade())//需要导包
 .error(R.drawable.ic_image_fail)
 .into(mMovieDetailTopIv);

//需要导入
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;

注:这里使用的是DrawableTransitionOptions,如果请求加载一个Bitmap的时候,需要使用 BitmapTransitionOptions.

4,thumbnail 缩略图
thumbnail()API 对本地和远程图片都适用,尤其是当低分辨率缩略图存在于 Glide 的磁盘缓存时,它们将很快被加载出来。
缩略图使用方式1:

GlideApp.with(context)
  .load(url)
  .thumbnail(Glide.with(context).load(thumbnailUrl))//这里加载网络缩略图(此时两个url不同)
  .into(imageView);

注:如果主要的请求在缩略图请求之前完成,那么缩略图将不再显示。
缩略图使用方式2:
如果没有缩略图的url,可以使用Glide中的overridesizeMultiplierAPI 来强制 Glide 在缩略图请求中加载一个低分辨率图像:

  • 使用override
int thumbnailSize = ...;
    GlideApp.with(this)
       .load(url)
       .thumbnail(GlideApp.with(this)
                        .load(url)//这里是同一个url
                        .override(thumbnailSize))//这里加载网络缩略图,并设置size
       .into(imageView);

-推荐使用:sizeMultiplier
它只需要一个 sizeMultiplier参数。如果你只是想为你的加载相同的图片,但尺寸为 ViewTarget 的某个百分比的话特别有用

GlideApp.with(this)
        .load(url)
        .thumbnail(0.2f)//这里加载网络图的0.2作为缩略图
        .into(imageView);

5,变换

在Glide中,Transformations 可以获取资源并修改它,然后返回被修改后的资源。通常变换操作是用来完成剪裁或对位图应用过滤器,但它也可以用于转换GIF动画,甚至自定义的资源类型。

内置变换类型

  • CenterCrop
  • FitCenter
  • CircleCrop
    推荐使用GlideApp进行链式调用。如下:
GlideApp.with(this)
        .load(url)
        .centerCrop()
        //.circleCrop()
        //.fitCenter()
        .into(imageView);

注:如果进行多次变换,每个 transform()调用,或任何特定转换方法(fitCenter(), centerCrop(), bitmapTransform() )的调用都会替换掉之前的变换。如果想要多重变换,需要使用MultiTransformation

6,缓存配置

  • 磁盘缓存策略(Disk Cache Strategy)

默认的策略叫做 AUTOMATIC ,它会尝试对本地和远程图片使用最佳的策略。当你加载远程数据(比如,从URL下载)时,AUTOMATIC 策略仅会存储未被你的加载过程修改过(比如,变换,裁剪–译者注)的原始数据,因为下载远程数据相比调整磁盘上已经存在的数据要昂贵得多。对于本地数据,AUTOMATIC 策略则会仅存储变换过的缩略图,因为即使你需要再次生成另一个尺寸或类型的图片,取回原始数据也很容易。

指定方法:

指定Disk Cache Strategy.png
  • 仅从缓存加载图片
    如果图片不再缓存,那么就会加载失败。
GlideApp.with(fragment)
  .load(url)
  .onlyRetrieveFromCache(true)//仅从缓存加载
  .into(imageView);
  • 跳过缓存
    1,跳过内存skipMemoryCache()
GlideApp.with(fragment)
  .load(url)
  .skipMemoryCache(true)//跳过内存缓存
  .into(view);

2,跳过磁盘缓存:DiskCacheStrategy.NONE

GlideApp.with(fragment)
  .load(url)
  .diskCacheStrategy(DiskCacheStrategy.NONE)
  .into(view);

注:以上两个可以同时使用,但是不建议这样做,因为每次都会重新请求,效率和流量.....

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容