package com.example.administrator.searchpicturetool.widght.imageLoader;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Looper;
import android.widget.ImageView;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 供外层使用的图片加载类,通过它实现图片加载
* Created by Wenhuaijun on 2016/4/22 0022.
*/
public class EasyImageLoader {
private static EasyImageLoader instance=null;
private static ImageLrucache imageLrucache;
private static ImageDiskLrucache imageDiskLrucache;
//创建一个静态的线程池对象
private static ThreadPoolExecutor THREAD_POOL_EXECUTOR = null;
//创建一个更新ImageView的UI的Handler
private static TaskHandler mMainHandler;
private Context mContext;
//私有的构造方法,防止在外部实例化该ImageLoader
private EasyImageLoader(Context context){
mContext =context.getApplicationContext();
THREAD_POOL_EXECUTOR = ImageThreadPoolExecutor.getInstance();
imageLrucache = new ImageLrucache();
imageDiskLrucache = new ImageDiskLrucache(mContext);
mMainHandler = new TaskHandler();
}
public static EasyImageLoader getInstance(Context context){
if(instance==null){
synchronized (EasyImageLoader.class){
if(instance == null){
instance = new EasyImageLoader(context);
}
}
}
return instance;
}
//返回内存缓存类
public static ImageLrucache getImageLrucache(){
if(imageLrucache==null){
synchronized (EasyImageLoader.class){
if(imageLrucache==null){
imageLrucache = new ImageLrucache();
}
}
}
return imageLrucache;
}
//返回本地缓存类
public static ImageDiskLrucache getImageDiskLrucache(Context context){
if(imageDiskLrucache==null){
synchronized (EasyImageLoader.class) {
if(imageDiskLrucache==null) {
imageDiskLrucache = new ImageDiskLrucache(context);
}
}
}
return imageDiskLrucache;
}
public void bindBitmap(final String url, final ImageView imageView){
bindBitmap(url, imageView, 0, 0,null);
}
public void bindBitmap(final String url, final ImageView imageView,BindBitmapErrorCallBack errorCallBack){
bindBitmap(url, imageView, 0, 0,errorCallBack);
}
public void bindBitmap(final String url, final ImageView imageView,final int reqWidth,final int reqHeight){
bindBitmap(url, imageView, reqWidth, reqWidth,null);
}
public void bindBitmap(final String uri,final ImageView imageView,final int reqWidth,final int reqHeight,BindBitmapErrorCallBack errorCallback){
//设置加载loadding图片
// imageView.setImageResource(R.drawable.ic_loading2);
//防止加载图片的时候数据错乱
// imageView.setTag(TAG_KEY_URI, uri);
imageView.setTag(uri);
//从内存缓存中获取bitmap
Bitmap bitmap = imageLrucache.loadBitmapFromMemCache(uri);
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
return;
}
LoadBitmapTask loadBitmapTask =new LoadBitmapTask(mContext,mMainHandler,imageView,uri,reqWidth,reqHeight,errorCallback);
//使用线程池去执行Runnable对象
THREAD_POOL_EXECUTOR.execute(loadBitmapTask);
}
/**
*
* @param url 图片链接
* @param callback bitmap回调接口
* @param reqWidth 需求宽度
* @param reqHeight 需求高度
*/
public synchronized void getBitmap(final String url, final BitmapCallback callback,int reqWidth,int reqHeight){
//从内存缓存中获取bitmap
final Bitmap bitmap = imageLrucache.loadBitmapFromMemCache(url);
if(bitmap!=null){
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
callback.onResponse(bitmap);
}
});
return ;
}
LoadBitmapTask loadBitmapTask =new LoadBitmapTask(mContext,callback,url,reqWidth,reqHeight);
//使用线程池去执行Runnable对象
THREAD_POOL_EXECUTOR.execute(loadBitmapTask);
}
public void getBitmap(final String url,BitmapCallback callback){
getBitmap(url,callback,0,0);
}
public void clearMemoryCache(){
getImageLrucache().evictAll();
}
public interface BitmapCallback{
public void onResponse(Bitmap bitmap);
}
public interface BindBitmapErrorCallBack{
public void onError(ImageView imageView);
}
}