一 . 基本使用方法
1.添加依赖
compile 'com.github.bumptech.glide:glide:3.7.0'
2.添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3.使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv = (ImageView)findViewById(R.id.iv);
String url = "https://img.gcall.com/dca5/M00/10/8E/wKhoNlggetaENWylAAAAAAAAAAA457.jpg";
//加载图片
Glide.with(MainActivity.this).load(url).into(iv);
}
}
4.设置占位图(placeholder)
有时候加载的图片过大时,或者网络不好时,我们经常希望控件在加载过程中有一张默认的占位图
Glide.with(this).load(url).placeholder(R.mipmap.place).into(iv);
5.设置错误图片(error)
当图片链接地址有误或者网络不行的时候,我们需要显示一个错误图片
Glide.with(this).load(url).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(iv);
6.设置动画(crossFade)
Glide默认是包含淡入淡出动画的时间为300ms(毫秒),我们可以修改这个动画的时间
Glide.with(this).load(url).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).crossFade(5000).into(iv);
- 7.取消动画(dontAnimate)
当我们不希望有淡入淡出动画时
Glide.with(this).load(url).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).dontAnimate().into(iv);
二 . 加载本地图片
1.在清单文件中增加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.加载
其实Glide加载本地图片和加载网络图片调用的方法是一样的,唯一的区别是说加载SD卡的图片需要SD卡的权限,加载网络需要网络权限
//本地文件
File file = new File(Environment.getExternalStorageDirectory(), "xiayu.png");
//加载图片
Glide.with(this).load(file).into(iv);
三 . Glide-加载Gif
1.简单加载
如果只是简单加载gif,其实跟加载普通图片一样
Glide.with(this).load(mGifUrl).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
2.把gif当作普通图片加载(asBitmap)
如果希望加载gif时只加载gif的第一帧,把gif当作普通图片一样加载,那么只需要加上asBitmap方法即可
Glide.with(this).load(mGifUrl).asBitmap().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
- 1
- 2
3.检查是否gif(asGif)
如果你希望加载的只是gif,如果不是gif就显示错误图片,那么只用加上asGif方法即可
Glide.with(this).load(mGifUrl).asGif().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
4.加载本地视频缩略图
网络上很多文章上都是从一篇译文里面拷贝过来的,里面说Glide可以加载本地视频,但是那篇译文漏翻译一句了,Glide只会加载本地视频的第一帧,也就是缩略图,而且其实加载缩略图的时候也无需转化为Uri,直接把File丢进去就行了
mVideoFile = new File(Environment.getExternalStorageDirectory(), "xiayu.mp4");
Glide.with(this).load(mVideoFile).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
5.其他
在大多数情况下,当你使用diskCacheStrategy(DiskCacheStrategy.SOURCE)时,Gif的加载速度会显着提高(其实就是把gif资源缓存到磁盘)
Glide.with(this).load(mGifUrl).diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
三 . Glide-内存缓存与磁盘缓存
1.缓存的资源
Glide的缓存资源分为两种:
- 1.原图(SOURCE) :原始图片
- 2.处理图(RESULT) :经过压缩和变形等处理后的图片
2.内存缓存策略(skipMemoryCache)
Glide默认是会在内存中缓存处理图(RESULT)的.
可以通过调用skipMemoryCache(true)来设置跳过内存缓存
//跳过内存缓存
Glide.with(this).load(mUrl).skipMemoryCache(true).into(mIv);
调用skipMemoryCache(false)没有代码上的意义,因为Glide默认就是不跳过内存缓存的,但是显示调用这个方法,可以让别人一目了然的知道你这次请求是会在内存中缓存的,所以还是建议显示调用一下这个方法来表明你的内存缓存策略
3.磁盘缓存策略(diskCacheStrategy)
Glide磁盘缓存策略分为四种,默认的是RESULT(默认值这一点网上很多文章都写错了,但是这一点很重要):
1.ALL:缓存原图(SOURCE)和处理图(RESULT)
2.NONE:什么都不缓存
3.SOURCE:只缓存原图(SOURCE)
4.RESULT:只缓存处理图(RESULT) —默认值
4.组合策略
和其他三级缓存一样,Glide的缓存读取顺序是 内存–>磁盘–>网络
需要注意的是Glide的内存缓存和磁盘缓存的配置相互没有直接影响,所以可以同时进行配置
例:
1.内存不缓存,磁盘缓存缓存所有图片
Glide.with(this).load(mUrl).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.ALL).into(mIv);
2.内存缓存处理图,磁盘缓存原图
Glide.with(this).load(mUrl).skipMemoryCache(false).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mIv);
5.缓存大小及路径
5.1内存缓存最大空间
Glide的内存缓存其实涉及到比较多的计算,这里就介绍最重要的一个参数,就是内存缓存最大空间
内存缓存最大空间(maxSize)=每个进程可用的最大内存 * 0.4
(低配手机的话是: 每个进程可用的最大内存 * 0.33)
5.2磁盘缓存大小
磁盘缓存大小: 250 * 1024 * 1024(250MB)
/** 250 MB of cache. */
int DEFAULT_DISK_CACHE_SIZE = 250 * 1024 * 1024;
5.3磁盘缓存目录
磁盘缓存目录: 项目/cache/image_manager_disk_cache
String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";
6.清除缓存
6.1清除所有缓存
清除所有内存缓存(需要在Ui线程操作)
Glide.get(this).clearMemory();
- 清除所有磁盘缓存(需要在子线程操作)
Glide.get(MainActivity.this).clearDiskCache();
注:在使用中的资源不会被清除