package com.applite.androidlibrary; import com.android.volley.toolbox.ImageLoader.ImageCache; import android.content.Context; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import android.util.DisplayMetrics; public class LruBitmapCache extends LruCache<String, Bitmap> implements ImageCache{ public LruBitmapCache(int maxSize) { super(maxSize); } @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } @Override public Bitmap getBitmap(String key) { return get(key); } @Override public void putBitmap(String key, Bitmap bitmap) { if(getBitmap(key)!=null) { put(key, bitmap); } } // Returns a cache size equal to approximately three screens worth of images. public static int getCacheSize(Context ctx) { final DisplayMetrics displayMetrics = ctx.getResources(). getDisplayMetrics(); final int screenWidth = displayMetrics.widthPixels; final int screenHeight = displayMetrics.heightPixels; // 4 bytes per pixel final int screenBytes = screenWidth * screenHeight * 4; // 获取应用程序最大可用内存 int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory / 8; // 设置图片缓存大小为程序最大可用内存的1/8 //return screenBytes * 3; //根据用户手机屏幕像素动态分配 而不是所有一刀切 return screenBytes * (cacheSize / screenBytes); } }