ImageLoader简单使用

效果图就是一个从网络加载的图片;在加载的时候图片的中间显示一个进度条                   

数据是随便找的一个网络图片的地址

   导入jar包universal-image-loader-1.9.5 用来展示商品使用    在使用 ImageLoader应加入

   ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));不然会报

   java.lang.IllegalStateException: ImageLoader must be init with configuration before using字面意思是在使用前要初始化

如下是代码

package com.itm.jiejie.activity;

import com.itm.jiejie.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;

/**
 * ImageLoder的使用
 * 
 * @author Administrator
 * 
 */
public class ImageLoaderActivity extends Activity {
    private ImageView img_loadView;
    private ProgressBar progressBar;
    /** 图片的网络地址 */
    private String urlString = "http://image.tianjimedia.com/uploadImages/2012/067/N80N0GUA36N0.jpg";
    
    private ImageLoader imageLoader = ImageLoader.getInstance();
    private DisplayImageOptions options;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_imageload);
        img_loadView = (ImageView) findViewById(R.id.img_load);
        progressBar = (ProgressBar)findViewById(R.id.pb_loading);
        /**
         * 下面这2个应该用个工具类封装下,方便调用
         */
        imageLoader.init(ImageLoaderConfiguration.createDefault(this));
        options = new DisplayImageOptions.Builder()
        .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片URL为空或是错误的时候显示图片
        .showImageOnFail(R.drawable.ic_error)//image加载失败或解码过程错误显示的图片
        .resetViewBeforeLoading(true)//设置下载的图片下载前是否重置,复位
        .cacheInMemory(true)//设置下载图片是否缓存到内存      
        .imageScaleType(ImageScaleType.EXACTLY)
        .bitmapConfig(Bitmap.Config.RGB_565)//设置图片解码类型
        .displayer(new FadeInBitmapDisplayer(300))//设置用户加载图片的task(这里是渐现)
        .build();
        
        //imageLoader.displayImage(urlString, img_loadView,options);
        imageLoader.displayImage(urlString, img_loadView,options,new MySimpleLoading(progressBar));
    }
    
    /**
     * ImageLoder 开始加载的监听
     * @author Administrator
     *
     */
    private class MySimpleLoading extends SimpleImageLoadingListener{
        private ProgressBar mBar;

        public MySimpleLoading(ProgressBar mBar) {
            super();
            this.mBar = mBar;
        }
        //开始加载
        @Override
        public void onLoadingStarted(String imageUri, View view) {
            // TODO Auto-generated method stub
            super.onLoadingStarted(imageUri, view);
            mBar.setVisibility(View.VISIBLE);
        }
        @Override
        public void onLoadingFailed(String imageUri, View view,
                FailReason failReason) {
            // TODO Auto-generated method stub
            String message = null;
            switch (failReason.getType()) {
            case IO_ERROR:
                message = "Input/Output error";
                break;
            case DECODING_ERROR:
                message = "Image can't be decoded";
                break;
            case NETWORK_DENIED:
                message = "Downloads are denied";
                break;
            case OUT_OF_MEMORY:
                message = "Out Of Memory error";
                break;
            case UNKNOWN:
                message = "Unknown error";
                break;
            }
            System.out.println(message);
            mBar.setVisibility(View.GONE);
        }
        @Override
        public void onLoadingComplete(String imageUri, View view,
                Bitmap loadedImage) {
            // TODO Auto-generated method stub
            super.onLoadingComplete(imageUri, view, loadedImage);
            mBar.setVisibility(View.GONE);
            System.out.println(imageUri);
        }
    }
      /**
     * 清除内存缓存
     */
    public void clearMemoryCache() {
        imageLoader.clearMemoryCache();
    }
}

 如下是一个封装好的ImageLoader的工具类,在项目中可以直接调用

package com.xiaolijuan.swiperefreshlayoutdome.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

/**
 * 初始化UniverImageLoader,并用来加载网络图片
 * Created by jiejie.
 */

public class ImageLoaderUtil {
    private static final int THREAD_COUNT = 2;
    private static final int PRIORITY = 2;
    private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024;
    private static final int CONNECTION_TIME_OUT = 5 * 1000;
    private static final int READ_TIME_OUT = 30 * 1000;

    private static  ImageLoaderUtil mInstance = null;
    private static ImageLoader mLoader = null;

    public static ImageLoaderUtil getInstance(Context context){
        if(mInstance == null){
            synchronized (ImageLoaderUtil.class){
                if(mInstance == null){
                    mInstance = new ImageLoaderUtil(context);
                }
            }
        }
        return mInstance;
    }

    /**
     * 私有构造方法完成初始化工作
     * @param context
     */
    private ImageLoaderUtil(Context context){
        ImageLoaderConfiguration config = new ImageLoaderConfiguration
                .Builder(context)
                .threadPoolSize(THREAD_COUNT)
                .threadPriority(Thread.NORM_PRIORITY - PRIORITY)
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new WeakMemoryCache())
                .diskCacheSize(DISK_CACHE_SIZE)
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候URL加密
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .defaultDisplayImageOptions(getDefaultOptions())
                .imageDownloader(new BaseImageDownloader(context,CONNECTION_TIME_OUT,READ_TIME_OUT))
                .build();
        ImageLoader.getInstance().init(config);
        mLoader = ImageLoader.getInstance();
    }

    /**
     * 默认的图片显示Options,可设置图片的缓存策略,编解码方式等,非常重要
     *
     * @return
     */
    private DisplayImageOptions getDefaultOptions() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)//设置下载的图片是否缓存在内存中, 重要,否则图片不会缓存到内存中
                .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中, 重要,否则图片不会缓存到硬盘中
                .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                .decodingOptions(new BitmapFactory.Options())//设置图片的解码配置
                .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
                .displayer(new FadeInBitmapDisplayer(300))//设置加载图片的task(这里是渐现)
                .build();
        return options;
    }

    /**
     * Load the image
     * @param imageView
     * @param path
     * @param listener
     * @param option
     */
    public void displayImage(ImageView imageView, String path, ImageLoadingListener listener,DisplayImageOptions option){
        if(mLoader != null){
            mLoader.displayImage(path,imageView,listener);
        }
    }
    //load the image
    public void displayImage(ImageView imageView, String path, ImageLoadingListener listener) {
        if (mLoader != null) {
            mLoader.displayImage(path, imageView, listener);
        }
    }

    public void displayImage(ImageView imageView, String path) {
        displayImage(imageView, path, null);
    }
}

原文地址:https://www.cnblogs.com/wangfengdange/p/5124924.html