Glide的使用详解

Glide是一个快速高效的图像加载库,专注于平滑滚动。
Glide提供了一个易于使用的API,一个性能可扩展的资源解码流水线和自动资源池。
Glide支持网络,解码和显示视频静止图像,图像和动画GIF

使用前准备

官方地址:https://github.com/bumptech/glide

1.gradle中使用

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:4.0.0'
  compile 'com.android.support:support-v4:25.3.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
}

2.maven

<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>glide</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.google.android</groupId>
  <artifactId>support-v4</artifactId>
  <version>r7</version>
</dependency>
<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>compiler</artifactId>
  <version>4.0.0</version>
  <optional>true</optional>
</dependency>

使用glide的基本模式

加载图片:

Glide.with(fragment)
    .load(url)
    .into(imageView);

取消加载(必须在子线程):

Glide.with(fragment).clear(imageView);

手动调用clear方法可以清除掉我们之前给view添加的图片,当然一般我们不需要这么做,因为在into()方法调用之前,会自动调用一次clear()方法清除掉之前的加载

方法

1.with()

这里写图片描述
with方法需要传入一个上下文对象,可以是activity,fragment,context或者fragmentActivity,对应图片加载的生命周期。返回requestManager对象。

2.load()

这里写图片描述
看传入的参数就可以发现我们能加载的哪些途径的图片

1. load(string)、load(url):加载网络图片

Glide.with(this).load(url).into(imageView); 或
String path = "file://"+ Environment.getExternalStorageDirectory().getPath()+"/mypic.jpg";
Glide.with(this).load(path).into(imageView);

2.load(uri):从uri获取

Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/" + R.mipmap.ic_launcher);
Glide.with(this).load(uri).into(imageView);

3.load(File file) 从文件加载

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

4.load(Integer resourceId) 从Resource中加载

Glide.with(this).load(R.mipmap.ic_launcher).into(imageView);

5.load(byte[] model)

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.error);
byte[] model = Bitmap2Bytes(bmp);
Glide.with(this).load(model).into(imageView);
public byte[] Bitmap2Bytes(Bitmap bm) {
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
     return baos.toByteArray();
}

DrawableTypeRequest

load方法返回一个DrawableTypeRequest对象,DrawableTypeRequest提供了一些我们在加载图片的时候可以使用方法,我们可以根据我们的需要来调用相应的方法

1. placeholder
占位图,也就是从开始加载到加载结束这段时间内显示的默认图片,placeholder有两个重载方法:
这里写图片描述
同时,也可以传入一个颜色值

Glide.with(this).load(url).placeholder(R.mipmap.loading).into(imageView);
Glide.with(this).load(url).placeholder(R.color.colorAccent).into(imageView);

2.error
异常图,加载出现异常的时候显示的图片,使用方法和placeholder一样,也可以传颜色值
3.fallback
设置model为空时显示的Drawable。
4.skipMemoryCache
该方法可以设置图片不缓存到内存中,默认缓存,此方法必须在UI线程调用
5.diskCacheStrategy
这里写图片描述
DiskCacheStrategy.ALL 缓存所有版本图片,这是Glide默认磁盘缓存策略
DiskCacheStrategy.NONE 不缓存
DiskCacheStrategy.SOURCE 缓存原始图片
DiskCacheStrategy.RESULT 缓存最终图像,也就是根据ImageView大小转换后的图片
6.override
代码中指定imageview的大小

Glide.with(this).load(url).override(200,200).into(imageView);

需要注意的是这里的单位是像素
7.CenterCrop() & .fitCenter()
CenterCrop()缩放图像让它填充到 ImageView 界限内并且裁剪额外的部分,ImageView 可能会完全填充,但图像可能不会完整显示。
fitCenter()缩放图像让图像测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。

Glide.with(this).load(url).fitCenter().into(imageView);

8.thumbnail
缩略图,限价在缩略图在加载要显示的图片

Glide.with(this).load(url).thumbnail(0.1f).into(imageView);

可以加载一个URL图片作为缩略图

DrawableRequestBuilder<String> thumbnailRequest = Glide.with(this).load(thumbUrl);
Glide.with(this).load(url).thumbnail(thumbnailRequest).into(imageView);

9.priority
设置请求的优先级,此方法给定了如下几个可选值,它们的优先级依次递减:

public enum Priority {
    IMMEDIATE,
    HIGH,
    NORMAL,
    LOW, priority,
}

10.crossFade() & .dontAnimate() & .animate()
.crossFade() 表示淡入淡出效果
.dontAnimate() 表示无动画效果
.animate() 可以加载我们自己定义的动画
11.listener
监听请求状态,此方法需要一个RequestListener类型参数,有两个回调方法;
onException返回true表示我们自己处理掉了异常,false表示交给Glide去处理;方法最好返回false,这样的话Glide会自动回调.error();
onResourceReady返回true表示用户自己已经设置好资源,包括截取操作,动画操作之类的,准备好显示;false表示交给Glide。

Glide.with(this)
.load(url)
.listener(new RequestListener<String, GlideDrawable>() {
  @Override
  public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
    return false;
  }
  @Override
  public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
    return false;
  }
})
.error(R.mipmap.error)
.into(imageView);

12. Gif的加载
一般情况下和加载静态图片一样

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

当然也提供了设置加载的图片类型
.asBitmap() 无论你传入的URL对应的是不是一个Gif,Glide都会把它当做静态图,这时的静态图会停留在Gif的第一帧
.asGif() 无论你传入的URL对应的是不是一个Gif,Glide都会把它当做Gif来处理,如果不是,Glide会回调.error()方法
13.Glide播放本地视频

Glide.with(this).load(Uri.fromFile(new File(filePath))).into(imageView);

注意:Glide只可播放本地视频文件,不可播放网络文件。

猜你喜欢

转载自blog.csdn.net/PanADE/article/details/77336108
今日推荐