效果图就是一个从网络加载的图片;在加载的时候图片的中间显示一个进度条
数据是随便找的一个网络图片的地址
导入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); } }