package com.mgw.member.uitls; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; import java.util.LinkedList; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.view.View; import android.widget.ImageView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageLoadingListener; import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; public class ImageLoaderHelper { private static String TAG = "ImageLoaderHelper"; public static ImageLoader imageLoader = ImageLoader.getInstance(); public static ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); public static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>()); @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (loadedImage != null) { ImageView imageView = (ImageView) view; boolean firstDisplay = !displayedImages.contains(imageUri); if (firstDisplay) { FadeInBitmapDisplayer.animate(imageView, 500); displayedImages.add(imageUri); } } } } public static void displayImage(int defaultResourceId, ImageView view, String url) { DisplayImageOptions options = new DisplayImageOptions.Builder() .showStubImage(defaultResourceId) .showImageForEmptyUri(defaultResourceId) .showImageOnFail(defaultResourceId) .cacheInMemory() .cacheOnDisc().bitmapConfig(Bitmap.Config.RGB_565).build(); imageLoader.displayImage(url, view, options, animateFirstListener); } public static void loadImage(int defaultResourceId, String url, SimpleImageLoadingListener listener) { DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheOnDisc().bitmapConfig(Bitmap.Config.RGB_565).build(); // DisplayImageOptions options = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).build(); imageLoader.loadImage(url, options, listener); } public static void clearDataCache() { imageLoader.clearDiscCache(); } public static interface IGetSavedFile { public void whileGotFile(String filePath); } public static void getFileFromUrl(String url, Context ctx, IGetSavedFile gotFile) { File f = imageLoader.getDiscCache().get(url); if (f != null && f.exists()) { gotFile.whileGotFile(f.getAbsolutePath()); } else { new BitmapWorkerTask(ctx, gotFile).execute(url); } } private static class BitmapWorkerTask extends AsyncTask<String, String, String> { private Context ctx; private IGetSavedFile gotFile; public BitmapWorkerTask(Context context, IGetSavedFile gotFile) { ctx = context; this.gotFile = gotFile; } @Override protected String doInBackground(String... params) { try { String urlString = params[0]; URL url = new URL(params[0]); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setDoInput(true); conn.connect(); InputStream inputStream = conn.getInputStream(); File f = getFile(urlString, ctx); saveFile(inputStream, f); return f.getAbsolutePath(); } catch (MalformedURLException e) { e.printStackTrace(); return ""; } catch (IOException e) { e.printStackTrace(); return ""; } } @Override protected void onPostExecute(String fileName) { gotFile.whileGotFile(fileName); } } private static void saveFile(InputStream is, File f) { if (f.exists()) { f.delete(); } try { f.createNewFile(); FileOutputStream fOut = null; byte[] buffer = new byte[1024]; fOut = new FileOutputStream(f); while(is.read(buffer) != -1) { fOut.write(buffer); } fOut.close(); is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static File getFile(String url, Context ctx) { File dir; if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { dir = new File(android.os.Environment.getExternalStorageDirectory(), "imgo/imageCache"); } else { dir = ctx.getCacheDir(); } if (!dir.exists()) { dir.mkdirs(); } String filename = url.substring(url.lastIndexOf("/")); File f = new File(dir, filename); return f; } public static Bitmap readBitMap(Context context, int resId) { BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; // 获取资源图片 InputStream is = context.getResources().openRawResource(resId); return BitmapFactory.decodeStream(is, null, opt); } }