Glide的使用
Glide是我使用最久,也是最喜欢的一款第三方图片加载框架,以前只是使用,也没有做系统性的总结,现在开始重新整理一遍这些优秀的第三方框架。
Glide官方地址:
Glide的相关方法:
- with:指定了声明周期
- load():加载资源,String/Uri/File/Integer/URL/byte[]/T,或者 loadFromMediaStore(Uri uri)
- placeholder(resourceId/drawable): 设置资源加载过程中的占位Drawable。
- error():load失败时显示的Drawable。
- override() :调整图片大小
- centerCrop():图片裁剪,ImageView 可能会完全填充,但图像可能不会完整显示。
- fitCenter(): 图像裁剪,图像将会完全显示,但可能不会填满整个 ImageView。
- animate(): 指定加载动画。
- crossFade()/crossFade(int duration):imageView改变时的动画,version 3.6.1后默认开启300毫秒
- dontAnimate():移除所有的动画。
- transform():图片转换。
- bitmapTransform(): bitmap转换,不可以和(centerCrop() 或 fitCenter())共用。
- priority(Priority priority):当前线程的优先级,Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL(default),Priority.LOW
- thumbnail(): 缩略图.
- listener():异常监听
- preload(int width, int height): 预加载resource到缓存中(单位为pixel)
- fallback(Drawable drawable):设置model为空时显示的Drawable。
- using() :为单个的请求指定一个 model
- asGif():Gif 检查,如果是图片且加了判断,则会显示error占位图,否则会显示图片
- asBitmap():bitmap转化,如果是gif,则会显示第一帧
- .skipMemoryCache(true) 禁止缓存
- .diskCacheStrategy(DiskCacheStrategy.NONE)禁止磁盘缓存
Glide 可以以load(File)的形式播放本地视频,但是如果需要播放网络视屏,则要用VideoView
缓存策略
一张图片变化特别快的时候,应该禁止缓存.skipMemoryCache(true)
即使关闭内存缓存,请求图片将会仍然被存储在设备的磁盘缓存中,如果一张图片变化很快,仍需要禁止磁盘缓存
.diskCacheStrategy(DiskCacheStrategy.NONE)
Glide 缓存了原始图像,全分辨率图像和另外小版本的图像,因此禁用磁盘缓存是用枚举来控制的
DiskCacheStrategy.NONE //什么都不缓存,就像刚讨论的那样
DiskCacheStrategy.SOURCE //仅仅只缓存原来的全分辨率的图像。在我们上面的例子中,将会只有一个 1000x1000 像素的图片
DiskCacheStrategy.RESULT //仅仅缓存最终的图像,即,降低分辨率后的(或者是转换后的)
DiskCacheStrategy.ALL //缓存所有版本的图像(默认行为)
自定义缓存
磁盘缓存,用类DiskLruCacheWrapper来设置目录builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
// 自己的缓存目录
File imgFile = new File(Environment.getExternalStorageDirectory()+"/Android/data/package-name");
return DiskLruCacheWrapper.get(imgFile,DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE);
}
});
内存缓存,用类Memory Cache 来设置大小
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
builder.setMemoryCache(new LruResourceCache(calculator.getMemoryCacheSize()));
Bitmap Pool
重复使用及销毁策略。设置方法:GlideBuilder.setBitmapPool() 默认采用的是LruBitmapPool,使用了LRU算法。MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setBitmapPool( new LruBitmapPool( customBitmapPoolSize );
Bitmap Format
Bitmap Format用于设置全局缺省首选Bitmap规格,设置方法:GlideBuilder.setDecodeFormat() 默认采用RGB_565(比ARGB_8888节省一半的内存),但不支持透明度。优先级
会发现优先级高的先 显示出来,即使图片比较大。//优先加载
Glide
.with(context)
.load(heroImageUrl)
.priority(Priority.HIGH)
.into(imageViewHero);
//后加载
Glide
.with(context)
.load(itemImageUrl)
.priority(Priority.LOW)
.into(imageViewItem);
先显示缩略图,后显示原图
//用原图的1/10作为缩略图
Glide