图片加载框架的二次封装
一、概述
随便目前的图片加载框架直接拿来用很好用,但很可能会出现满足不了目前需求需要更换的情况,如果每个地方都替换以便,额。。。。。。。为了避免这种情况的发生进行二次封装,只需修改初始化的地方就可以了,原理也很简单,大家一看便知:详情可见Demo
直接上代码:
private staticImageLoadermImageLoader;
public static voidinitImageLoader(ImageLoader imageLoader) {
mImageLoader= imageLoader;
}
public staticImageLoadergetImageLoader() {
returnmImageLoader;
}
需要实现的接口
public interface ImageLoader {
/**
* 加载图片
*/
void loadImage(Context context, ImageView imageView, String url,int placeholderImg,int errorImg);
void loadImage(Context context, ImageView imageView, String url);
/**
* 加载图片原来的大小
* @param context
* @param imageView
* @param url
*/
void loadOriginalImage(Context context, ImageView imageView, String url);
/**
* 方形的圆角图片
*/
void loadRoundImage(Context context, ImageView imageView, String url,int placeholderImg,int errorImg);
/**
* 圆形图片
*/
void loadCircleImage(Context context, ImageView imageView, String url,int placeholderImg,int errorImg);
/**
* 清除缓存
*/
void clearMemoryCache(Context context);
}
具体的实现方法,这里先粘一个glide的
packagecom.hengda.glideloader;
importandroid.content.Context;
importandroid.os.Looper;
importandroid.widget.ImageView;
importcom.bumptech.glide.Glide;
importcom.bumptech.glide.RequestManager;
importcom.bumptech.glide.load.resource.drawable.GlideDrawable;
importcom.bumptech.glide.request.animation.GlideAnimation;
importcom.bumptech.glide.request.target.SimpleTarget;
importcom.hengda.imageload.ImageLoadUtils;
/**
* Created by wenda on 2017/4/26.
*/
public classGlideImageLoaderimplementsImageLoadUtils.ImageLoader {
@Override
public voidloadImage(Context context,ImageView imageView,String url,intplaceholderImg,interrorImg) {
Glide.with(context).load(url)//
.asBitmap()
.placeholder(placeholderImg)//
.error(errorImg)//
.centerCrop()
.into(imageView);
}
@Override
public voidloadImage(Context context,ImageView imageView,String url) {
Glide.with(context).load(url)//
.asBitmap()
.centerCrop()
.into(imageView);
}
@Override
public voidloadOriginalImage(Context context, finalImageView imageView,String url) {
Glide.with(context).load(url).into(newSimpleTarget() {
@Override
public voidonResourceReady(GlideDrawable resource,GlideAnimation glideAnimation) {
imageView.setImageDrawable(resource);
}
});
}
@Override
public voidloadRoundImage(Context context,ImageView imageView,String url,intplaceholderImg,interrorImg) {
RequestManager glideRequest;
glideRequest = Glide.with(context);
glideRequest.load(url)
.asBitmap()
.placeholder(placeholderImg)
.error(errorImg)
.centerCrop()
.transform(newGlideRoundTransform(context)).into(imageView);
}
@Override
public voidloadCircleImage(Context context,ImageView imageView,String url,intplaceholderImg,interrorImg) {
RequestManager glideRequest;
glideRequest = Glide.with(context);
glideRequest.load(url)
.placeholder(placeholderImg)
.error(errorImg)
.crossFade()
.transform(newGlideCircleTransform(context)).into(imageView);
}
@Override
public voidclearMemoryCache(Context context) {
clearImageDiskCache(context);
clearImageMemoryCache(context);
}
/**
* 清除图片磁盘缓存
*/
public static voidclearImageDiskCache(finalContext context) {
try{
if(Looper.myLooper() == Looper.getMainLooper()) {
newThread(newRunnable() {
@Override
public voidrun() {
Glide.get(context).clearDiskCache();
}
}).start();
}else{
Glide.get(context).clearDiskCache();
}
}catch(Exception e) {
e.printStackTrace();
}
}
/**
* 清除图片内存缓存
*/
public static voidclearImageMemoryCache(Context context) {
try{
if(Looper.myLooper() == Looper.getMainLooper()) {//只能在主线程执行
Glide.get(context).clearMemory();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
二、使用
1.引入
dependencies {
//使用gilde
compile 'com.hengda:wenda.glideloader:0.0.2'
//使用picasso
compile 'com.hengda:wenda.picassoloader:0.0.2'
//其他
compile 'com.hengda:hdimageload:0.0.3'
}
2.在Application中初始化
//使用gilde
ImageLoadUtils.initImageLoader(new GlideImageLoader());//设置一次全局使用 修改为其他框架只需要修改此处和引入
//使用picasso
ImageLoadUtils.initImageLoader(new PicassoImageLoader());
3.使用
//正常使用
ImageLoadUtils.getImageLoader().loadImage(context,imageView,url,R.mipmap.bg_default,R.mipmap.bg_default);
//不需要占位图
ImageLoadUtils.getImageLoader().loadImage(context,imageView,url);
//加载原图片尺寸
ImageLoadUtils.getImageLoader().loadOriginalImage(context,imageView,url);
//清除缓存
ImageLoadUtils.getImageLoader().clearMemoryCache(context.this);
//加载方形的圆角图片
ImageLoadUtils.getImageLoader().loadRoundImage(context,imageView,url,R.mipmap.bg_default,R.mipmap.bg_default);
//加载圆形图片
ImageLoadUtils.getImageLoader().loadCircleImage(context,imageView,url,R.mipmap.bg_default,R.mipmap.bg_default);
三、说明
1.目前只支持glide和picasso如果需要其他可以继承ImageLoadUtils.ImageLoader子类实现方法确定如何加载图片
2.修改为其他图片加载框架只需修改初始化时代码其他不需要修改
3.如需使用fresco需要把xml中imageview改为SimpleDraweeView