欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Glide使用

程序员文章站 2022-06-05 12:37:57
...

Glide是一个Android的图片加载和缓存库,它主要专注于大量图片的流畅加载,Glide几乎可以胜任任何你需要使用到的图片从网络拉取,压缩,显示的场景.
基本用法:

Glide.with(MainActivity.this).load(url).into(mImageView);

apply
这里边有一个apply方法,用于一些对图片的个人定制,它传入的是RequestOptions,比如说我们可以这样:

RequestOptions options = new RequestOptions()
                        .centerCrop()
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .skipMemoryCache(false);
Glide.with(MainActivity.this).load(url).apply(options).into(mImageView);

这里的RequestOptions 你自己随便定制.

RequestOptions :
1.占位符placeholder
2.transformations变换
3.缓存策略
4.组件特定参数:编码质量,解码参数等.

new RequestOptions()
             .override(int w, int h)//重新测量大小
             .fallback()//url为空时,加载的图片
             .error()//错误时的图片
             .placeholder();//未加载之前的图片
             .centerCrop()
             .diskCacheStrategy(DiskCacheStrategy.ALL)
             .skipMemoryCache(false);//是否跳过内存缓存
             //....还有一些其他的设置

监听(listener)
当处理完图片后,我们可能会还想对它进行监听,看他是否成功或者对它做进一步的处理.

Glide.with(MainActivity.this).load(url).listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    //错误返回
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    //注意这个方法如果返回true的话,代表事件被处理,也就是说在Glide中其他调用它的地方就不执行了.
                        return false;
                    }
                }).into(mImageView);

transition(变换)
里边还有一个transition方法,决定了图片加载完成后如何过渡到你想要的图片.
1.淡入
2.交叉淡入
3.不过渡

Glide.with(MainActivity.this)
.asBitmap()
.load("")
.transition(BitmapTransitionOptions.withCrossFade())
.apply(options)
.into(mImageView);              

这里注意,我是先将图片表明为bitmap ( asBitmap() ) ,然后才使用BitmapTransitionOptions,不同的类型使用不同的transition.
drawable用DrawableTransitionOptions.如果不是bitmap和drawable,就用GenericTransitionOptions

RequestBuilder
它是如何得到的呢?

RequestBuilder<Drawable> builder = Glide.with(MainActivity.this).

通过builder,我们可以使用as(),load(),apply(),into().其内部使用的是链式结构,每一个方法都返回RequestBuilder.而且它可以重用,这样就不用每次都写那么长了,虽然只有一句.

RequestBuilder<Drawable> builder = Glide.with(MainActivity.this).asDrawable();
for (int i = 0; i < 10; i++){
     builder.load("").into(mImageView);
}

预加载:
有时候我们不想图片立即显示,但是into()方法必须传东西啊,这个时候我们就可以使用preload(),它是把图片先缓存起来,你下次在加载,它就直接从缓存里拿就行了.这里注意,我们要将缓存策略改成可以缓存,不然它往哪放了.

Glide.with(MainActivity.this).load(url).preload();
//你想显示的时候.
Glide.with(MainActivity.this).load(url).into(mImageView);

取消加载:
有一个很有用的东西就是,在我们使用listview时,自动滑动时如果在加载图片,那会导致很卡,所以这个时候我们让它停止加载,等它停止时在加载,那就很好了.

//重新加载
Glide.with(MainActivity.this).resumeRequests();
//停止加载
Glide.with(MainActivity.this).pauseRequests();

新特性(注解)
前面我们使用的时候,需要配置参数,特别是RequestOptions ,那我们如何一步到位了?这个时候我们需要用到它的新特性注解.
首先:创建一个类注意他的注解.

@GlideModule
public class MyGlideApp extends AppGlideModule {
  //在这里边,你可以实现自己对于图片的一些定制,重新编译工程,他会给你实现这几个类(看图)
  //当然你不定制也可以.
}

Glide使用
这个时候你就可以一句搞定啦

GlideApp.with(MainActivity.this)
                        .load(url)
                        .centerCrop()
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
                        .dontAnimate().dontTransform().skipMemoryCache(false)
                       .placeholder(R.drawable.music).error(R.drawable.music).fallback(R.drawable.music)
                        .override(100, 100)
                        .into(mImageView);