/** * 最主要的方法 * * @param url * @param imageView * @param requiredSize 裁剪图片大小尺寸(一直裁剪到图片宽或高 至少有一个小与requiredSize的时候) * @param listener * @param defaultPicResId */ public void displayImage( String url, ImageView imageView, int requiredSize, OnImageLoaderListener listener, int defaultPicResId) { imageViews.put(imageView, url); // 先从内存缓存中查找 Bitmap bitmap = memoryCache.get(url); if (bitmap != null) { imageView.setImageBitmap(bitmap); if (null != listener) { listener.onFinishedImageLoader(imageView, bitmap); // 通知完成加载 } } else { // 如果defaultPicResId小于0,则不设置默认图片 if (defaultPicResId < 0) { queuePhoto(url, imageView, requiredSize, listener); return; } /** * 如果defaultPicResId等于0,则设置默认图片为config中的默认图片,并开启新线程加载真实需要的图片 * 如果defaultPicResId大于0,则设置默认图片为指定的默认图片,并开启新线程加载真实需要的图片 */ if (defaultPicResId == 0) { defaultPicResId = config.getDefaultResId(); } imageView.setImageResource(defaultPicResId); queuePhoto(url, imageView, requiredSize, listener); } }
/** * 初始化方法(初始化各种缓存配置),推荐在Application中调用 * * @param context */ public static void init(Context context, CacheConfig config) { imageLoader = new ImageLoader(); imageLoader.context = context; /** 如果配置了CacheConfig,则使用配置的Config;否则,使用默认的Config */ imageLoader.config = null != config ? config : new CacheConfig(); imageLoader.memoryCache = new MemoryCache(config.getMemoryCachelimit()); /** 如果在config中配置了缓存目录,则使用之;否则,使用默认的缓存路径 */ imageLoader.fileCache = new FileCache( imageLoader.context, null != config.getFileCachePath() ? config.getFileCachePath() : Environment.getExternalStorageDirectory().toString() + "/Android/data/" + context.getPackageName() + "/cache"); }
/** * decode这个图片并且按比例缩放以减少内存消耗,虚拟机对每张图片的缓存大小也是有限制的 * * @param f * @param requiredSize * @return */ private Bitmap decodeFile(File f, int requiredSize) { try { // decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f), null, o); // 计算合理的缩放指数(2的整幂数) int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 1; while (true) { // if (width_tmp / 2 < requiredSize || height_tmp / 2 < // requiredSize){ // break; // } // width_tmp /= 2; // height_tmp /= 2; // scale *= 2; if (width_tmp <= requiredSize || height_tmp <= requiredSize) { break; } width_tmp /= 2; height_tmp /= 2; scale *= 2; } // decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); // o2.inSampleSize = (int) scale; o2.inSampleSize = scale; o2.inPreferredConfig = config.getBitmapConfig(); return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) { } return null; }
public void displayImage( String url, ImageView imageView, OnImageLoaderListener listener, int defaultPicResId) { displayImage(url, imageView, config.getDefRequiredSize(), listener, defaultPicResId); }
public void displayImage(String url, ImageView imageView, OnImageLoaderListener listener) { displayImage(url, imageView, config.getDefRequiredSize(), listener, 0); }
public void displayImage(String url, ImageView imageView) { displayImage(url, imageView, config.getDefRequiredSize(), null, 0); }