package cn.link.imageloader; import android.graphics.Bitmap; import android.graphics.ColorMatrixColorFilter; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import cn.link.imageloader.assist.ImageSize; import cn.link.imageloader.assist.ImageSizeUtils; import cn.link.imageloader.assist.ViewScaleType; import java.io.*; import java.net.URL; /** * Created with IntelliJ IDEA. * User: Link * Date: 13-5-9 * Time: PM3:19 * To change this template use File | Settings | File Templates. */ public class ImageLoaderEngine { public static ConfigOptions sConfigOptions; public static void init(ConfigOptions options) { sConfigOptions = options; } public static void display(ImageView imageView, DisplayOptions mDisplayOptions) { Bitmap bitmap = sConfigOptions.mMemoryCache.get(mDisplayOptions.getDisplayUrl()); if (bitmap != null) { mDisplayOptions.getDisplayer().display(bitmap, imageView); } else { new ImageDisplayTask(imageView, mDisplayOptions).execute(); } } private static class ImageDisplayTask extends SimpleAsyncTask<Void, Void, Bitmap> { ImageView mImageView; DisplayOptions mDisplayOptions; Exception mException; public ImageDisplayTask(ImageView imageView, DisplayOptions mDisplayOptions) { this.mImageView = imageView; this.mDisplayOptions = mDisplayOptions; } @Override protected void onPreExecute() { super.onPreExecute(); if (mDisplayOptions.getOnLoadingListener() != null) { mDisplayOptions.getOnLoadingListener().onStart(); } mImageView.setImageResource(mDisplayOptions.getResetImage()); } @Override protected Bitmap doInBackground(Void... params) { mDisplayOptions.mTargetSize = ImageSizeUtils.defineTargetSizeForView(mImageView, 1080, 1920); mDisplayOptions.mViewScalType = ViewScaleType.fromImageView(mImageView); Bitmap bitmap = null; try { bitmap = tryGetBitmap(mDisplayOptions); } catch (IOException e) { e.printStackTrace(); mException = e; } return bitmap; //ToDo } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (mException != null) { if (mDisplayOptions.getOnLoadingListener() != null) { mDisplayOptions.getOnLoadingListener().onFailed(mException); } return; } if (bitmap != null && mImageView != null) { mDisplayOptions.getDisplayer().display(bitmap, mImageView); } if (mDisplayOptions.getOnLoadingListener() != null) { mDisplayOptions.getOnLoadingListener().onComplete(); } } } public static Bitmap tryGetBitmap(DisplayOptions options) throws IOException { Bitmap bitmap = sConfigOptions.mMemoryCache.get(options.getDisplayUrl()); if (bitmap != null) { return bitmap; } bitmap = sConfigOptions.mDiscCache.read(options.getDisplayUrl(), options, sConfigOptions.mDecoder); if (bitmap != null) { return bitmap; } InputStream inputStream = sConfigOptions.mDownloader.getStream(options.getDisplayUrl(), options); bitmap = sConfigOptions.mDiscCache.decodeAndWrite(inputStream, options, sConfigOptions.mDecoder); if (bitmap != null && options.ifCacheInMemory()) { sConfigOptions.mMemoryCache.put(options.getDisplayUrl(), bitmap); return bitmap; } return bitmap; //ToDo } // public static void saveBitmap(String url, File targetFile) throws IOException { // // Bitmap bitmap = sConfigOptions.mMemoryCache.get(url); // if (bitmap == null) { // String fileName = sConfigOptions.mFileNameGenerator.generate(url); // File image = new File(sConfigOptions.mDiscCache.getCacheDir(), fileName); // if (!image.exists()) { // image.createNewFile(); // BufferedOutputStream fout = new BufferedOutputStream(new FileOutputStream(image)); // InputStream input = new URL(url).openStream(); // byte[] buf1 = new byte[4098]; // int len = 0; // while ((len = input.read(buf1)) != -1) { // fout.write(buf1, 0, len); // } // fout.flush(); // fout.close(); // // if (input != null) { // input.close(); // } // } // } // } }