转载请标明出处:https://www.jianshu.com/p/3d47987432ab
本文出自:Jlanglang
前言
Glide作为一个简单易用的库,平时我们使用基本上就是
Glide.with(this).load(data).into(view)
本文主要介绍,如何加载已加密的图片.围绕2种类型:
-
File
本地资源 -
Url
网络资源
第一次写付费文章.文章之所以弄成付费的也是想试一下
我会尽可能写的没啥毛病.简单.易懂
如果有回复我会根据反馈来更新文章内容.
最后我会留微信,有其他问题也可以问我(不过白天上班比较忙,可能不会及时回复)
环境
Glide版本:4.11
语言:kotlin
implementation 'com.github.bumptech.glide:glide:4.11.0'
kapt 'com.github.bumptech.glide:compiler:4.11.0'
第一步- 定义自定义的GlideMoudle
先看代码,这里我以File举例
@GlideModule
class MyGlideModule : AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
super.registerComponents(context, glide, registry)
//关键代码
registry.append(File::class.java, InputStream::class.java, DESModelLoader.LoaderFactory())
}
/**
* 这里不开启,避免添加相同的modules两次
* @return
*/
override fun isManifestParsingEnabled(): Boolean {
return false
}
}
关键代码
registry.append(File::class.java, InputStream::class.java, MyModelLoader.LoaderFactory())
看源码:
@NonNull
public <Model, Data> Registry append(
@NonNull Class<Model> modelClass,
@NonNull Class<Data> dataClass,
@NonNull ModelLoaderFactory<Model, Data> factory) {
modelLoaderRegistry.append(modelClass, dataClass, factory);
return this;
}
1.ModelLoaderFactory<Model, Data> factory
为什么这个参数放前面讲
因为另外2个参数都是这个类的泛型.
这个看字母意思就能明白,model加载工厂.
我们要实现的加密解密,会在这个工厂里面操作.所有需要写一个实现类
主要作用是用来创建ModelLoader
2.modelClass
也就是load的类型,也就是加载什么样的数据时会使用上面的工厂
如Glide.with(this).load(data).into(view)
就是这个load
3.dataClass
这个参数一般就是InputStream,或者它的子类