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。