使用前须知:
Glide
是一个专注于平滑滚动的图片加载和缓存库。- 项目中如果用到Glide去加载和缓存图片,那么下载这些图片又应该怎么处理呢?
- 一种解决就是使用本库所提供的使用
GlideDown
去下载图片 - 所以本库依赖于
Glide
2.8
版本 - 好处是如果有缓存,则优先使用缓存来下载图片,避免重复的网络请求
关于本库使用到的一下权限,需要开发者在6.0+的手机上自行动态申请
1
2<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
除了下载图片还能做什么?
- 提供4中方式添加存储路径和图片的网络地址
- 如果不想提供下载图片后保存的文件名,可以只提供下载存储的文件夹路径
- 可以设置下载后的图片显示在系统相册中
- 可以下载过程中取消下载任务
- 下载多图,如果其中一张下载设置,可以设置是否中断后续下载任务
- 设置是否提供下载过程中的日志显示
- 目标文件已存在的话,可以设置是否覆盖目标文件
- 提供图片下载进度对话框,实时显示下载进度
- 提供必要的回调接口,开发者可以自定义处理各种事件
怎么引入到自己项目中:
在
主项目
的build.gradle
中的repositories
节点下添加如下代码1
maven { url "http://nexus.iamfan.cn/repository/android/" }
在需要引入的moudle中的
build.grade
中的dependencies
节点下添加如下代码1
compile('ren.helloworld:glidedown:1.14@aar') { transitive = true }
提供的方法及解释:
- GlideDown.class类所提供的 :
方法名 解释 down(Map<String,String>map) 添加存储路径和图片网络地址的Map<savePath,downUrl>集合 down(String saveDirPath,List<String> downUrls) 添加存储图片的文件夹路径和图片网络地址集合List<downUrls> down(List<String> savePaths, List<String> downUrls) 添加存储路径集合和图片网络地址集合 down(String savePath, String downUrl) 添加存储路径和图片网络地址 showDialog(boolean isShowDialgo) 下载过程中是否显示进度条对话框,默认为 false
showDialog(String dialogTitle) 下载过程中显示进度条对话框,并设置对话框的标题 cancelButton(boolean cancelButton) 下载过程中是否显示取消下载的按钮,默认为 false
scanImage(boolean isScanImage) 下载成功的图片是否需要显示在系统相册中,默认为 true
failureblock(boolean isFailureBlock) 下载多图时,如果其中一张下载失败,是否中断后面的下载,默认为 true
overwrite(boolean isOverwrite) 如果需要下载的图片已经存在,是否继续下载并覆盖原文件,默认为 false
debug(boolean isDebug) 下载过程中是否输出日志,默认为 false
enqueue(Listener listener) 执行下载,监听可以为 null
- GlideDown.Listener.class所提供的 :
方法名 解释 onBefore() 主线程
非必
开始下载之前会调用此方法onProgress(int i) 主线程
非必
下载第i张图片时会调用此方法onSuccessOne(int i, File file) 主线程
非必
第i张图片下载成功后会调用此方法,并回调下载成功后的文件onSuccess(LinkedList<String> strings) 主线程
必须
所有的图片下载完成后会调用此方法onFailure(int i, String errmsg) 主线程
必须
第i张图片下载失败后会调用的方法,并回调失败的原因onAfter() 主线程
非必
图片无论是下载成功还是失败,都会在最后调用的方法
关于混淆
本库已经内置了混淆规则,混淆规则如下,如果需要额外的混淆规则,请在app moudle的混淆规则中添加。
1
2
3
4
5-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
关于测试部分
app moudle中的MainActivity类中已有简单的测试代码。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45private void down() {
String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/GlideDown";
String ss_p = dirPath + "/ss.jpg";
String ss_d = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488440549345&di=38b952767d660a9a1128a16b6f54c830&imgtype=0&src=http%3A%2F%2Fwapfile.desktx.com%2Fpc%2F170104%2Fbigpic%2F5864a73ded7df.jpg";
List<String> sl = new ArrayList<>();
sl.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488440549345&di=74e26d9ab9ad9559502d711c7f19d9cd&imgtype=0&src=http%3A%2F%2Fimg.pconline.com.cn%2Fimages%2Fupload%2Fupc%2Ftx%2Fwallpaper%2F1212%2F13%2Fc0%2F16574646_1355387800466_800x600.jpg");
sl.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488440549344&di=5ff0a690713e5289b22590ed0002114e&imgtype=0&src=http%3A%2F%2Fuploads.xuexila.com%2Fallimg%2F1702%2F966-1F21Q01S7.jpg");
List<String> ll_p = new ArrayList<>();
ll_p.add(dirPath + "/ll_1.jpg");
ll_p.add(dirPath + "/ll_2.jpg");
List<String> ll_d = new ArrayList<>();
ll_d.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488440549344&di=fe6284a102e54e68e822940df637f23f&imgtype=0&src=http%3A%2F%2Fb.zol-img.com.cn%2Fdesk%2Fbizhi%2Fimage%2F4%2F960x600%2F1383276504143.jpg");
ll_d.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488440549344&di=c0d400610b65cde4874fd1acb83c3ec5&imgtype=0&src=http%3A%2F%2Fuploads.xuexila.com%2Fallimg%2F1701%2F966-1F116153608.jpg");
Map<String, String> m = new HashMap<>();
m.put(dirPath + "/m_1.jpg", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488440549341&di=e477965bba15a857f287b427d0946d98&imgtype=0&src=http%3A%2F%2Fb.zol-img.com.cn%2Fdesk%2Fbizhi%2Fimage%2F3%2F960x600%2F1380159960698.jpg");
m.put(dirPath + "/m_2.jpg", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488440549340&di=1a984087d6a92b06e930467d43f4692b&imgtype=0&src=http%3A%2F%2Fwapfile.desktx.com%2Fpc%2F170104%2Fbigpic%2F5864a739c0c0d.jpg");
new GlideDown(this)
.down(ss_p, ss_d)
.down(dirPath, sl)
.down(ll_p, ll_d)
.down(m)
.showDialog(true)
.skipDiskCache(true)
.skipMemoryCache(true)
.scanImage(true)
.failureblock(false)
.overwrite(true)
.debug(true)
.cancelButton(true)
.enqueue(new GlideDown.Listener() {
public void onSuccess(LinkedList<String> linkedList) {
}
public void onFailure(int i, String s) {
}
});
}