美文网首页
Android - Glide4.0+ 简单使用

Android - Glide4.0+ 简单使用

作者: 徘徊0_ | 来源:发表于2018-05-08 17:47 被阅读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);

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

相关文章

网友评论

      本文标题:Android - Glide4.0+ 简单使用

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