关闭

Glide使用

49人阅读 评论(0) 收藏 举报
分类:

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 {
  //在这里边,你可以实现自己对于图片的一些定制,重新编译工程,他会给你实现这几个类(看图)
  //当然你不定制也可以.
}

这里写图片描述
这个时候你就可以一句搞定啦

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);
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1300次
    • 积分:232
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类