package me.storm.ninegag.data;
import android.app.ActivityManager;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.widget.ImageView;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import me.storm.ninegag.App;
/**
* Created by storm on 14-4-12.
*/
public class ImageCacheManager {
// 取运行内存阈值的1/8作为图片缓存
private static final int MEM_CACHE_SIZE = 1024 * 1024 * ((ActivityManager) App.getContext()
.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass() / 8;
private static ImageLoader mImageLoader = new ImageLoader(RequestManager.mRequestQueue, new BitmapLruCache(
MEM_CACHE_SIZE));
private ImageCacheManager() {
}
public static ImageLoader.ImageContainer loadImage(String requestUrl,
ImageLoader.ImageListener imageListener) {
return loadImage(requestUrl, imageListener, 0, 0);
}
public static ImageLoader.ImageContainer loadImage(String requestUrl,
ImageLoader.ImageListener imageListener, int maxWidth, int maxHeight) {
return mImageLoader.get(requestUrl, imageListener, maxWidth, maxHeight);
}
public static ImageLoader.ImageListener getImageListener(final ImageView view,
final Drawable defaultImageDrawable, final Drawable errorImageDrawable) {
return new ImageLoader.ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (errorImageDrawable != null) {
view.setImageDrawable(errorImageDrawable);
}
}
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
if (response.getBitmap() != null) {
if (!isImmediate && defaultImageDrawable != null) {
TransitionDrawable transitionDrawable = new TransitionDrawable(
new Drawable[]{
defaultImageDrawable,
new BitmapDrawable(App.getContext().getResources(),
response.getBitmap())
}
);
transitionDrawable.setCrossFadeEnabled(true);
view.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(100);
} else {
view.setImageBitmap(response.getBitmap());
}
} else if (defaultImageDrawable != null) {
view.setImageDrawable(defaultImageDrawable);
}
}
};
}
}