Android Open Source - SimpleReader Native 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.wallpaper;
// www  .  ja  v  a2s.  c  om
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.os.Handler;
import android.os.Message;
import android.support.v4.util.LruCache;

public class NativeImageLoader {
  private LruCache<String, Bitmap> cache;
  private static NativeImageLoader instance;
  private ExecutorService threadPool;
  
  private NativeImageLoader() {
    threadPool = Executors.newFixedThreadPool(1);
    final int maxMemory = (int)Runtime.getRuntime().maxMemory() / 1024;
    final int cacheSize = maxMemory / 4;
    cache = new LruCache<String, Bitmap>(cacheSize) {
      @Override
      protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes() * value.getHeight() / 1024;
      }
    };
  }
  
  public static NativeImageLoader getInstance() {
    if(instance == null) {
      instance = new NativeImageLoader();
    }
    return instance;
  }
  
  public Bitmap loadImage(final String path, final OnImageLoadListener listener) {
    return loadImage(path, null, listener);
  }
   
  @SuppressLint("HandlerLeak")
  public Bitmap loadImage(final String path, final Point point, final OnImageLoadListener listener) {
    Bitmap result = loadFromCache(path);
    
    final Handler handler = new Handler() {
      @Override
      public void handleMessage(Message msg) {
        super.handleMessage(msg);
        listener.onImageLoad(path, (Bitmap)msg.obj);
      }
    };
    
    if(result == null) {
      threadPool.execute(new Runnable() {
        @Override
        public void run() {
          int width = 0;
          int height = 0;
          if(point != null) {
            width = point.x;
            height = point.y;
          }
          Bitmap bitmap = decodeBitmapFromFile(path, width, height);
          Message msg = handler.obtainMessage();
          msg.obj = bitmap;
          handler.sendMessage(msg);
          addToCache(path, bitmap);
        }
      });
    }
    return result;
  }
  
  public Bitmap decodeBitmapFromFile(String path, int width, int height) {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);
    options.inSampleSize = computeScale(options, width, height);
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(path, options);
  }
  
  private int computeScale(BitmapFactory.Options options, int width, int height) {
    int inSampleSize = 1;
    if(width == 0 || height == 0) {
      return inSampleSize;
    }
    
    int bitmapWidth = options.outWidth;
    int bitmapHeight = options.outHeight;
    
    if(bitmapWidth > width || bitmapHeight > height) {
      int widthScale = Math.round((float)bitmapWidth / (float)width);
      int heightScale = Math.round((float)bitmapHeight / (float)height);
      
      inSampleSize = widthScale > heightScale ? heightScale : widthScale;
    }
    
    return inSampleSize;
  }
  
  private Bitmap loadFromCache(String key) {
    return cache.get(key);
  }
  
  private void addToCache(String key, Bitmap bitmap) {
    if(cache.get(key) == null && bitmap != null) {
      cache.put(key, bitmap);
    }
  }
  
  public interface OnImageLoadListener {
    public void onImageLoad(String path, Bitmap btimap);
  }
}




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