图片Android开发Android知识

图片加载框架的二次封装

2017-06-03  本文已影响268人  335905722282

一、概述

随便目前的图片加载框架直接拿来用很好用,但很可能会出现满足不了目前需求需要更换的情况,如果每个地方都替换以便,额。。。。。。。为了避免这种情况的发生进行二次封装,只需修改初始化的地方就可以了,原理也很简单,大家一看便知:详情可见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

详情可见Demo

上一篇 下一篇

猜你喜欢

热点阅读