网络框架之Glide

crossFade()

图片被加载时,会有一个渐变的动画。
Glide提供了crossFade来实现。该方法有三个override;

crossFade()
crossFade(int duration)
crossFade(Animation animation, int duration)   //  @Deprecated
crossFade(int animationId, int duration)

默认动画的during是300 milliseconds。Gulide允许你自己设置时间和动画资源。

dontimate()

如果你想要图片加载的过程动画,调用该方法可以清楚crossFade带来的动画效果。

override(int width,int height)

和picasso相比,Glide在内存优化上更高效,Glide自动匹配Imageview所需大小的资源,举例:当imageview 的width和height分别是100px,200px,那么Glide会在下载资源时自动转换资源大小为100x200;当然,Picasso也能做到这点,但是Picasso需要你手动调用fit();
Glide如果你不想他自动给你转换资源大小,那么你可以调用override(int width, int height),他会在给imageview加载资源之前进行resize。该方法在你已知imageview大小的情况下,会非常有用。

Scaling ImageView

通常直接使用override(width,height)会导致图片变形失真,Glide提供了两个方法来缩放图片。
centerCrop():图片裁剪,ImageView 可能会完全填充override的大小,但图像可能不会完整显示。超出的部分会被裁剪。
fitCenter(): 图像裁剪,图像将会完全显示,但可能不会填满整个 ImageView。

asGif()

Gulide支持加载gif图片,使用非常简单。

Glide.with(this)
     .load("http://ww2.sinaimg.cn/mw690/005MZqZdgw1euxqzhynu5g30dw07rnn2.gif")
     .into(mGlideImage);

这里可能会有一个问题,就是原本想加载一个gif图,但是该Url下拿到的资源并非是一个有效的gif图,如果是一个图片,那么Gulide会自动加载该地址下的图片,如果是非图片格式,那么Gulide会加载.error()中的资源。怎么样才能强制这里必须加载一个gif图片呢?Gulide拱了提供了一个方法 asGif() .强制这里显示gif,如果资源不是gif图,那么直接加载.error()资源。

Glide.with(this)
// .load("http://images2015.cnblogs.com/blog/538831/201601/538831-20160118091801545-1336712994.png")//出错
   .load("http://ww2.sinaimg.cn/mw690/005MZqZdgw1euxqzhynu5g30dw07rnn2.gif")//正确
   .asGif()
   .placeholder(R.mipmap.default_img)
   .error(R.mipmap.default_error)
   .into(mGlideImage);

diskCacheStrategy(DiskCacheStrategy.SOURCE)

Gulide加载gif时会比较慢,加上这个设置会变得很快。

 Glide.with(this)
       .load("http://images.17173.com/2015/news/2015/01/19/2015cpb0119gif32.gif")
       .asGif()
       .placeholder(R.mipmap.default_img)
       .error(R.mipmap.default_error)
       .diskCacheStrategy(DiskCacheStrategy.SOURCE)
       .into(mGlideImage);

.asBitmap()

Gulide支持显示一组图片或者一组gif图,.asBitmap()方法只显示images/gif最上面的一张/一帧图,一张静态图。

.skipMemoryCache(true)

禁止内存缓存数据。默认是.skipMemoryCache(false).

.diskCacheStrategy(DiskCacheStrategy.NONE)

禁止磁盘存储数据。
DiskCacheStrategy有以下几种类型:
DiskCacheStrategy.NONE 不做缓存处理。
DiskCacheStrategy.SOURCE 缓存原图,资源多大,缓存多大。
DiskCacheStrategy.RESULT 缓存转换后的大小图片资源,即imageview多大缓存多大(Gulide默认缓存机制)
DiskCacheStrategy.ALL 缓存所有类型图片资源,即DiskCacheStrategy.RESULT+DiskCacheStrategy.SOURCE 一起缓存

.priority()

如果一个页面有一个大图,大图下面有两张小图。那么正常情况下,是小图现在加出来。在加载默认图。如果你想为图片加载设置加载先后顺序的话可以用到.priority();
priority有四个级别,从低到高依次是:
Priority.LOW Priority.NORMAL, Priority.High, Priority.Immediate

 Glide.with(this)
                .load("http://pic.58pic.com/01/04/20/47bOOOPIC37.jpg")
                .priority(Priority.HIGH)
                .into(mImageView);

当然使用这个方法并不意味着就一定会先加载出大图,在加载小图。如果大图资源太大,可能还是小图先加载出来。
但是一般情况下,资源大小差不多的时候会优先响应级别高的请求。

.thumbnail()

缩略图是显示图片的一个缩略版,和原图相比,大小会小很多,下载也会很快。但是他和placeHolder() 还是不同的,placeHolder()是预置的一个静态资源,而.thumbnail()则可以使是从网络下载下载动态图片。当缩略图在原图之后才下载下来时,不用担心会覆盖原图,Glide会自动忽略thunmnail。
Glide提供了两种方式加载thumbnail()。一种是加载一个比原图小很多的资源图,使用:

thumbnail(float sizeMultiplier)

参数表示原图的多少倍。通常参数范围是0-1,比如0.1f表示原图的1/10大小,原图100x100,那么缩略图就是10x10。由于这个时候缩略图很小你需要使用scaleType调整资源大小来适应imageView。

  Glide.with(this)
                .load("http://pic.58pic.com/01/04/20/47bOOOPIC37.jpg")
                .priority(Priority.HIGH)
                .thumbnail(0.1f)
                .into(mImageView);

但是如果请求的缩略图大小和原图大小相差无几的话,那么使用上一种方式显得意义不大,并不会显示的比原图下载的快。Glide提供个另一种加载方式。

humbnail(DrawableRequestBuilder<?> thumbnailRequest)

使用方式:

DrawableRequestBuilder<String> thumbnailRequest =               Glide.with(this).load("http://www.sznews.com/photo/images/attachement/jpg/site3/20141117/4437e641f08815d3d1380b.jpg");
        Glide.with(this)
                .load("http://pic.58pic.com/01/04/20/47bOOOPIC37.jpg")
                .priority(Priority.HIGH)
                .thumbnail(thumbnailRequest)
                .into(mImageView);

分开加载做两次请求,这样就ok了。甚至于缩略图的url和原图的url不一样也无所谓啊。

target

如果只是想获得图片的bitmao资源,而不做其他操作,那么你就要用到target了。
Glide提供了两种方式,一种是simpleTarget,

     SimpleTarget<Bitmap> simpleTarget = new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    //处理获取到的bitmap
                    KLCZCommonUtils.saveBitmap2file(resource, KLCZCommonUtils.getErWeiMaPath() + "网络图片.jpg");
                    mImageView.setImageBitmap(resource);
                }
            };
            Glide.with(getApplicationContext())
                    .load("http://pic.58pic.com/01/04/20/47bOOOPIC37.jpg")
                    .asBitmap()
                    .into(simpleTarget);

在onResourceReady方法里面,你可以对获取到的bitmao进行自己的操作。
如果你想下载指定大小的额bitmap,那么你可以闯入参数:

int myWidth = 512;
int myHeight = 384;

Glide.with(getApplicationContext())
    .load(youUrl)
    .asBitmap()
    .into(new SimpleTarget<Bitmap>(myWidth, myHeight) {
        @Override
        public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
            // Do something with bitmap here.
        }
    };
注意

由于Glide的生命周期和activity/fragment的生命周期同步,确保在Glide请求过程中不会发生Activity/fragment被destroy的情况。对于大多数的SimplyTarget来说,with都是使用的yourAppApplication。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值