(一)CommonLibrary之Retrofit+RxJava网络请求封装
国际惯例,先看调用方式
//网络图片加载
String url = "https://p3.pstatp.com/large/666c00065c746ccf3333";
ImageHelper.getDefault().loadImage(this, new DownloadImage.Builder()
.path(url)
.targetView(ivExample)
.memoryCache(false)
.diskCache(false)
.build());
//本地图片加载
NeedPermissionOperate.getDefault().buildSafeExternalStoragePath(this, "scene_photo.jpg",
new MustGrantPermissionCallBack(this) {
@Override
public void granted(Context context, String result) {
ImageHelper.getDefault().loadImage(context, new DownloadImage.Builder()
.targetView(ivExample)
.build());
}
});
//缓存图片获取
ImageHelper.getDefault().getCacheImage(url, new FileCallBack() {
@Override
public void downloadSuccess(File file) {
}
@Override
public void downloadFail(Throwable e) {
}
})
一如既往的简洁式操作完成功能,你可能看到了NeedPermissionOperate这个东西,这是封装好的可以安全操作需要危险权限的动作,这个没什么好说的,看看实现基本就OK了。
这个默认由Glide提供实现,你想更换图片加载框架也简单,只需实现IImageService然后在ImageHelper中替换掉就可以了
**
* 图片加载服务
* Created by WangPing on 2018/1/24.
*/
public interface IImageService {
/**
* 加载图片
* @param context 上下文
* @param image 图片信息
*/
void loadImage(Context context, DownloadImage image);
/**
* 获取缓存图片
* @param url 被缓存图片的url
* @param callBack 缓存图片获取结果回调
*/
void getCacheImage(String url, FileCallBack callBack);
}
其实最重要的就是DownloadImage的构造了,使用构建者设计模式来满足你对图片加载的各种要求。最主要的还是imagePath和需要容纳图片的imageView,如果你需要容纳图片的imageView实现了IViewProgressEvent(文件下载时介绍过这个)接口,那么会提供图片的加载进度回调到那个接口中,在那里面你就可以做你需要做的操作。