效果圖就是一個從網絡加載的圖片;在加載的時候圖片的中間顯示一個進度條
數據是隨便找的一個網絡圖片的地址
導入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); } }
