Android Open Source - SimpleReader Image Loader






From Project

Back to project page SimpleReader.

License

The source code is released under:

Apache License

If you think the Android project SimpleReader listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.dreamteam.app.utils;
//from w ww.j a  va2  s  .c om
import java.io.File;
import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;

import com.dreamteam.app.commons.AppContext;

/**
 * ???????
 * @author Administrator
 */
public class ImageLoader {
  private static HashMap<String, SoftReference<Bitmap>> cache;
  private static Map<ImageView, String> imageViews;
  private static ExecutorService pool;
  private Bitmap defBitmap;
  private OnImageLoadFinishListener imageLoadListener; 
  
  public ImageLoader(OnImageLoadFinishListener imageLoadListener) {
    this.imageLoadListener = imageLoadListener;
  }

  static {
    cache = new HashMap<String, SoftReference<Bitmap>>();
    pool = Executors.newFixedThreadPool(5);
    imageViews = Collections
        .synchronizedMap(new WeakHashMap<ImageView, String>());
  }

  public Bitmap getCacheImage(String url) {
    Bitmap bmp = null;

    if (cache.containsKey(url)) {
      bmp = cache.get(url).get();
    }
    return bmp;
  }

  public void loadImage(String url, ImageView imageView, int width, int height) {
    Logger.warn("tangl", "load image:" + url);
    imageViews.put(imageView, url);
    Bitmap bmp = getCacheImage(url);

    if (bmp != null) {
      Logger.warn("tangl", "load from cache");
      imageView.setImageBitmap(bmp);
    } else {
      File file = AppContext.getSdImgCache(url);
      if (file.exists()) {
        try {
          bmp = BitmapFactory.decodeFile(file.getAbsolutePath());
          imageView.setImageBitmap(bmp);
        } catch (OutOfMemoryError e) {
          e.printStackTrace();
        }
      } else {
        // ??????
        Logger.warn("tangl", "load from network");
        imageView.setImageBitmap(defBitmap);
        loadNetImage(url, imageView, width, height);
      }
    }
  }

  private void loadNetImage(final String url, final ImageView imageView,
      final int width, final int height) {
//    final Handler handler = new Handler() {
//      @Override
//      public void handleMessage(Message msg) {
//        String tag = imageViews.get(imageViews);
//        if (tag != null && tag.equals(url)) {
//          if (msg.obj != null) {
//            imageView.setImageBitmap((Bitmap) msg.obj);
//          }
//        }
//      }
//    };

    pool.execute(new Runnable() {
      @Override
      public void run() {
        try {
          InputStream is = HttpUtils.getInputStream(url);
          Bitmap bmp = BitmapFactory.decodeStream(is);
          bmp = Bitmap.createScaledBitmap(bmp, width, height, true);
          cache.put(url, new SoftReference<Bitmap>(bmp));

//          Message msg = handler.obtainMessage();
//          msg.obj = bmp;
//          handler.sendMessage(msg);
          imageLoadListener.onLoadFinish(bmp);
          ImageUtils.saveImageToSD(bmp, url);
          Logger.warn("tangl", "load finish");
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }

  public void setDefBitmap(Bitmap defBitmap) {
    this.defBitmap = defBitmap;
  }
  
  public interface OnImageLoadFinishListener {
    public void onLoadFinish(Bitmap bitmap);
  }
}




Java Source Code List

com.dreamteam.app.adapter.CategoryDetailAdapter.java
com.dreamteam.app.adapter.FeedCategoryAdapter.java
com.dreamteam.app.adapter.GridAdapter.java
com.dreamteam.app.adapter.GuideViewPagerAdapter.java
com.dreamteam.app.adapter.ItemListAdapter.java
com.dreamteam.app.adapter.MPagerAdapter.java
com.dreamteam.app.commons.AppConfig.java
com.dreamteam.app.commons.AppContext.java
com.dreamteam.app.commons.HtmlFilter.java
com.dreamteam.app.commons.IFlyHelper.java
com.dreamteam.app.commons.ItemListEntityParser.java
com.dreamteam.app.commons.SectionHelper.java
com.dreamteam.app.commons.SeriaHelper.java
com.dreamteam.app.commons.SkinManager.java
com.dreamteam.app.commons.UIHelper.java
com.dreamteam.app.config.Contants.java
com.dreamteam.app.db.DbManager.java
com.dreamteam.app.db.FavoItemDbHelper.java
com.dreamteam.app.db.FeedDBManager.java
com.dreamteam.app.db.provider.RSSFeedCategoryProvider.java
com.dreamteam.app.entity.FeedItem.java
com.dreamteam.app.entity.Feed.java
com.dreamteam.app.entity.ItemListEntity.java
com.dreamteam.app.entity.RSSFeedCategroy.java
com.dreamteam.app.entity.Section.java
com.dreamteam.app.img.FileCacheManager.java
com.dreamteam.app.img.FileCache.java
com.dreamteam.app.img.ICache.java
com.dreamteam.app.img.ImageLoadTask.java
com.dreamteam.app.img.ImageLoad.java
com.dreamteam.app.img.ImageLoader.java
com.dreamteam.app.img.MemoryCache.java
com.dreamteam.app.rss.Dates.java
com.dreamteam.app.rss.Integers.java
com.dreamteam.app.rss.MediaAttributes.java
com.dreamteam.app.rss.MediaEnclosure.java
com.dreamteam.app.rss.MediaThumbnail.java
com.dreamteam.app.rss.RSSBase.java
com.dreamteam.app.rss.RSSConfig.java
com.dreamteam.app.rss.RSSException.java
com.dreamteam.app.rss.RSSFault.java
com.dreamteam.app.rss.RSSFeed.java
com.dreamteam.app.rss.RSSHandler.java
com.dreamteam.app.rss.RSSItem.java
com.dreamteam.app.rss.RSSLoader.java
com.dreamteam.app.rss.RSSParserSPI.java
com.dreamteam.app.rss.RSSParser.java
com.dreamteam.app.rss.RSSReaderException.java
com.dreamteam.app.rss.RSSReader.java
com.dreamteam.app.rss.Resources.java
com.dreamteam.app.ui.About.java
com.dreamteam.app.ui.BaseActivity.java
com.dreamteam.app.ui.BaseTitledActivity.java
com.dreamteam.app.ui.CategoryDetailActivity.java
com.dreamteam.app.ui.ColorListActivity.java
com.dreamteam.app.ui.FavoriteItemList.java
com.dreamteam.app.ui.FeedCategoryActivity.java
com.dreamteam.app.ui.FeedbackUI.java
com.dreamteam.app.ui.GuideActivity.java
com.dreamteam.app.ui.ImageDialog.java
com.dreamteam.app.ui.ImagesBrowseActivity.java
com.dreamteam.app.ui.ItemDetailActivity.java
com.dreamteam.app.ui.ItemListActivity.java
com.dreamteam.app.ui.LocalImageBrowseActivity.java
com.dreamteam.app.ui.LoginDialog.java
com.dreamteam.app.ui.MainActivity.java
com.dreamteam.app.ui.Setting.java
com.dreamteam.app.ui.SplashActivity.java
com.dreamteam.app.ui.SwitchBgActivity.java
com.dreamteam.app.ui.WidgetProvider.java
com.dreamteam.app.ui.adapter.ColorListAdapter.java
com.dreamteam.app.utils.CategoryNameExchange.java
com.dreamteam.app.utils.DateUtils.java
com.dreamteam.app.utils.FileUtils.java
com.dreamteam.app.utils.HttpUtils.java
com.dreamteam.app.utils.ImageLoader.java
com.dreamteam.app.utils.ImageUtils.java
com.dreamteam.app.utils.Logger.java
com.dreamteam.app.utils.MD5.java
com.dreamteam.app.utils.StringUtils.java
com.dreamteam.app.wallpaper.ChildAdapter.java
com.dreamteam.app.wallpaper.GroupGridAdapter.java
com.dreamteam.app.wallpaper.ImageBean.java
com.dreamteam.app.wallpaper.MyImageView.java
com.dreamteam.app.wallpaper.NativeImageLoader.java
com.dreamteam.app.wallpaper.WallPaperManager.java
com.dreamteam.custom.ui.PathAnimations.java
com.dreamteam.custom.ui.PullToRefreshListView.java