Universal-Image-Loader源码阅读(41)-ImageLoader

来源:互联网 发布:java jre 32位下载 编辑:程序博客网 时间:2024/06/05 15:05

我们的入口。

别看这个函数这么的长,其实需要关注的就几个函数而已,大部分的代码量都是注释,以及核心函数的不同表现形式。


源码:

/** * Singletone for image loading and displaying at {@link ImageView ImageViews}<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before any other method. * * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) * @since 1.0.0 */public class ImageLoader {public static final String TAG = ImageLoader.class.getSimpleName();static final String LOG_INIT_CONFIG = "Initialize ImageLoader with configuration";static final String LOG_DESTROY = "Destroy ImageLoader";static final String LOG_LOAD_IMAGE_FROM_MEMORY_CACHE = "Load image from memory cache [%s]";private static final String WARNING_RE_INIT_CONFIG = "Try to initialize ImageLoader which had already been initialized before. " + "To re-init ImageLoader with new configuration call ImageLoader.destroy() at first.";private static final String ERROR_WRONG_ARGUMENTS = "Wrong arguments were passed to displayImage() method (ImageView reference must not be null)";private static final String ERROR_NOT_INIT = "ImageLoader must be init with configuration before using";private static final String ERROR_INIT_CONFIG_WITH_NULL = "ImageLoader configuration can not be initialized with null";private ImageLoaderConfiguration configuration;private ImageLoaderEngine engine;private ImageLoadingListener defaultListener = new SimpleImageLoadingListener();private volatile static ImageLoader instance;/** Returns singleton class instance */public static ImageLoader getInstance() {//单例模式的典型实现方法if (instance == null) {synchronized (ImageLoader.class) {if (instance == null) {instance = new ImageLoader();}}}return instance;}protected ImageLoader() {}/** * Initializes ImageLoader instance with configuration.<br /> * If configurations was set before ( {@link #isInited()} == true) then this method does nothing.<br /> * To force initialization with new configuration you should {@linkplain #destroy() destroy ImageLoader} at first. * * @param configuration {@linkplain ImageLoaderConfiguration ImageLoader configuration} * @throws IllegalArgumentException if <b>configuration</b> parameter is null */public synchronized void init(ImageLoaderConfiguration configuration) {if (configuration == null) {throw new IllegalArgumentException(ERROR_INIT_CONFIG_WITH_NULL);}if (this.configuration == null) {L.d(LOG_INIT_CONFIG);engine = new ImageLoaderEngine(configuration);this.configuration = configuration;} else {L.w(WARNING_RE_INIT_CONFIG);}}/** * Returns <b>true</b> - if ImageLoader {@linkplain #init(ImageLoaderConfiguration) is initialized with * configuration}; <b>false</b> - otherwise */public boolean isInited() {return configuration != null;}/** * Adds display image task to execution pool. Image will be set to ImageAware when it's turn. <br/> * Default {@linkplain DisplayImageOptions display image options} from {@linkplain ImageLoaderConfiguration * configuration} will be used.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri        Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageAware {@linkplain com.nostra13.universalimageloader.core.imageaware.ImageAware Image aware view} *                   which should display image * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageAware</b> is null */public void displayImage(String uri, ImageAware imageAware) {displayImage(uri, imageAware, null, null, null);}/** * Adds display image task to execution pool. Image will be set to ImageAware when it's turn.<br /> * Default {@linkplain DisplayImageOptions display image options} from {@linkplain ImageLoaderConfiguration * configuration} will be used.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri        Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageAware {@linkplain com.nostra13.universalimageloader.core.imageaware.ImageAware Image aware view} *                   which should display image * @param listener   {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires events on *                   UI thread if this method is called on UI thread. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageAware</b> is null */public void displayImage(String uri, ImageAware imageAware, ImageLoadingListener listener) {displayImage(uri, imageAware, null, listener, null);}/** * Adds display image task to execution pool. Image will be set to ImageAware when it's turn.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri        Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageAware {@linkplain com.nostra13.universalimageloader.core.imageaware.ImageAware Image aware view} *                   which should display image * @param options    {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                   decoding and displaying. If <b>null</b> - default display image options *                   {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                   from configuration} will be used. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageAware</b> is null */public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options) {displayImage(uri, imageAware, options, null, null);}/** * Adds display image task to execution pool. Image will be set to ImageAware when it's turn.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri        Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageAware {@linkplain com.nostra13.universalimageloader.core.imageaware.ImageAware Image aware view} *                   which should display image * @param options    {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                   decoding and displaying. If <b>null</b> - default display image options *                   {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                   from configuration} will be used. * @param listener   {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires events on *                   UI thread if this method is called on UI thread. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageAware</b> is null */public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,ImageLoadingListener listener) {displayImage(uri, imageAware, options, listener, null);}/** * Adds display image task to execution pool. Image will be set to ImageAware when it's turn.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri              Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageAware       {@linkplain com.nostra13.universalimageloader.core.imageaware.ImageAware Image aware view} *                         which should display image * @param options          {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                         decoding and displaying. If <b>null</b> - default display image options *                         {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                         from configuration} will be used. * @param listener         {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires *                         events on UI thread if this method is called on UI thread. * @param progressListener {@linkplain com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener *                         Listener} for image loading progress. Listener fires events on UI thread if this method *                         is called on UI thread. Caching on disk should be enabled in *                         {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions options} to make *                         this listener work. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageAware</b> is null */public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {displayImage(uri, imageAware, options, null, listener, progressListener);}/** * Adds display image task to execution pool. Image will be set to ImageAware when it's turn.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri              Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageAware       {@linkplain com.nostra13.universalimageloader.core.imageaware.ImageAware Image aware view} *                         which should display image * @param options          {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                         decoding and displaying. If <b>null</b> - default display image options *                         {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                         from configuration} will be used. * @param targetSize       {@linkplain ImageSize} Image target size. If <b>null</b> - size will depend on the view * @param listener         {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires *                         events on UI thread if this method is called on UI thread. * @param progressListener {@linkplain com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener *                         Listener} for image loading progress. Listener fires events on UI thread if this method *                         is called on UI thread. Caching on disk should be enabled in *                         {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions options} to make *                         this listener work. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageAware</b> is null */public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,ImageSize targetSize, ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {//我们平时用的Display的最终实现checkConfiguration();if (imageAware == null) {throw new IllegalArgumentException(ERROR_WRONG_ARGUMENTS);}if (listener == null) {listener = defaultListener;}if (options == null) {options = configuration.defaultDisplayImageOptions;}if (TextUtils.isEmpty(uri)) {engine.cancelDisplayTaskFor(imageAware);listener.onLoadingStarted(uri, imageAware.getWrappedView());if (options.shouldShowImageForEmptyUri()) {imageAware.setImageDrawable(options.getImageForEmptyUri(configuration.resources));} else {imageAware.setImageDrawable(null);}listener.onLoadingComplete(uri, imageAware.getWrappedView(), null);return;}if (targetSize == null) {targetSize = ImageSizeUtils.defineTargetSizeForView(imageAware, configuration.getMaxImageSize());}String memoryCacheKey = MemoryCacheUtils.generateKey(uri, targetSize);engine.prepareDisplayTaskFor(imageAware, memoryCacheKey);listener.onLoadingStarted(uri, imageAware.getWrappedView());Bitmap bmp = configuration.memoryCache.get(memoryCacheKey);//先在memoryCache中找if (bmp != null && !bmp.isRecycled()) {L.d(LOG_LOAD_IMAGE_FROM_MEMORY_CACHE, memoryCacheKey);if (options.shouldPostProcess()) {ImageLoadingInfo imageLoadingInfo = new ImageLoadingInfo(uri, imageAware, targetSize, memoryCacheKey,options, listener, progressListener, engine.getLockForUri(uri));ProcessAndDisplayImageTask displayTask = new ProcessAndDisplayImageTask(engine, bmp, imageLoadingInfo,defineHandler(options));if (options.isSyncLoading()) {displayTask.run();} else {engine.submit(displayTask);}} else {options.getDisplayer().display(bmp, imageAware, LoadedFrom.MEMORY_CACHE);listener.onLoadingComplete(uri, imageAware.getWrappedView(), bmp);}} else {//加载图片if (options.shouldShowImageOnLoading()) {imageAware.setImageDrawable(options.getImageOnLoading(configuration.resources));} else if (options.isResetViewBeforeLoading()) {imageAware.setImageDrawable(null);}ImageLoadingInfo imageLoadingInfo = new ImageLoadingInfo(uri, imageAware, targetSize, memoryCacheKey,options, listener, progressListener, engine.getLockForUri(uri));LoadAndDisplayImageTask displayTask = new LoadAndDisplayImageTask(engine, imageLoadingInfo,defineHandler(options));if (options.isSyncLoading()) {displayTask.run();} else {engine.submit(displayTask);}}}/** * Adds display image task to execution pool. Image will be set to ImageView when it's turn. <br/> * Default {@linkplain DisplayImageOptions display image options} from {@linkplain ImageLoaderConfiguration * configuration} will be used.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri       Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageView {@link ImageView} which should display image * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageView</b> is null */public void displayImage(String uri, ImageView imageView) {displayImage(uri, new ImageViewAware(imageView), null, null, null);}/** * Adds display image task to execution pool. Image will be set to ImageView when it's turn. <br/> * Default {@linkplain DisplayImageOptions display image options} from {@linkplain ImageLoaderConfiguration * configuration} will be used.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri       Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageView {@link ImageView} which should display image * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageView</b> is null */public void displayImage(String uri, ImageView imageView, ImageSize targetImageSize) {displayImage(uri, new ImageViewAware(imageView), null, targetImageSize, null, null);}/** * Adds display image task to execution pool. Image will be set to ImageView when it's turn.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri       Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageView {@link ImageView} which should display image * @param options   {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                  decoding and displaying. If <b>null</b> - default display image options *                  {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                  from configuration} will be used. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageView</b> is null */public void displayImage(String uri, ImageView imageView, DisplayImageOptions options) {displayImage(uri, new ImageViewAware(imageView), options, null, null);}/** * Adds display image task to execution pool. Image will be set to ImageView when it's turn.<br /> * Default {@linkplain DisplayImageOptions display image options} from {@linkplain ImageLoaderConfiguration * configuration} will be used.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri       Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageView {@link ImageView} which should display image * @param listener  {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires events on *                  UI thread if this method is called on UI thread. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageView</b> is null */public void displayImage(String uri, ImageView imageView, ImageLoadingListener listener) {displayImage(uri, new ImageViewAware(imageView), null, listener, null);}/** * Adds display image task to execution pool. Image will be set to ImageView when it's turn.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri       Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageView {@link ImageView} which should display image * @param options   {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                  decoding and displaying. If <b>null</b> - default display image options *                  {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                  from configuration} will be used. * @param listener  {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires events on *                  UI thread if this method is called on UI thread. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageView</b> is null */public void displayImage(String uri, ImageView imageView, DisplayImageOptions options,ImageLoadingListener listener) {displayImage(uri, imageView, options, listener, null);}/** * Adds display image task to execution pool. Image will be set to ImageView when it's turn.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri              Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param imageView        {@link ImageView} which should display image * @param options          {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                         decoding and displaying. If <b>null</b> - default display image options *                         {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                         from configuration} will be used. * @param listener         {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires *                         events on UI thread if this method is called on UI thread. * @param progressListener {@linkplain com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener *                         Listener} for image loading progress. Listener fires events on UI thread if this method *                         is called on UI thread. Caching on disk should be enabled in *                         {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions options} to make *                         this listener work. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @throws IllegalArgumentException if passed <b>imageView</b> is null */public void displayImage(String uri, ImageView imageView, DisplayImageOptions options,ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {displayImage(uri, new ImageViewAware(imageView), options, listener, progressListener);}/** * Adds load image task to execution pool. Image will be returned with * {@link ImageLoadingListener#onLoadingComplete(String, android.view.View, android.graphics.Bitmap)} callback}. * <br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri      Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param listener {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires events on UI *                 thread if this method is called on UI thread. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public void loadImage(String uri, ImageLoadingListener listener) {loadImage(uri, null, null, listener, null);}/** * Adds load image task to execution pool. Image will be returned with * {@link ImageLoadingListener#onLoadingComplete(String, android.view.View, android.graphics.Bitmap)} callback}. * <br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri             Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param targetImageSize Minimal size for {@link Bitmap} which will be returned in *                        {@linkplain ImageLoadingListener#onLoadingComplete(String, android.view.View, *                        android.graphics.Bitmap)} callback}. Downloaded image will be decoded *                        and scaled to {@link Bitmap} of the size which is <b>equal or larger</b> (usually a bit *                        larger) than incoming targetImageSize. * @param listener        {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires *                        events on UI thread if this method is called on UI thread. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public void loadImage(String uri, ImageSize targetImageSize, ImageLoadingListener listener) {loadImage(uri, targetImageSize, null, listener, null);}/** * Adds load image task to execution pool. Image will be returned with * {@link ImageLoadingListener#onLoadingComplete(String, android.view.View, android.graphics.Bitmap)} callback}. * <br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri      Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param options  {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                 decoding and displaying. If <b>null</b> - default display image options *                 {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) from *                 configuration} will be used.<br /> * @param listener {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires events on UI *                 thread if this method is called on UI thread. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public void loadImage(String uri, DisplayImageOptions options, ImageLoadingListener listener) {loadImage(uri, null, options, listener, null);}/** * Adds load image task to execution pool. Image will be returned with * {@link ImageLoadingListener#onLoadingComplete(String, android.view.View, android.graphics.Bitmap)} callback}. * <br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri             Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param targetImageSize Minimal size for {@link Bitmap} which will be returned in *                        {@linkplain ImageLoadingListener#onLoadingComplete(String, android.view.View, *                        android.graphics.Bitmap)} callback}. Downloaded image will be decoded *                        and scaled to {@link Bitmap} of the size which is <b>equal or larger</b> (usually a bit *                        larger) than incoming targetImageSize. * @param options         {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                        decoding and displaying. If <b>null</b> - default display image options *                        {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                        from configuration} will be used.<br /> * @param listener        {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires *                        events on UI thread if this method is called on UI thread. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,ImageLoadingListener listener) {loadImage(uri, targetImageSize, options, listener, null);}/** * Adds load image task to execution pool. Image will be returned with * {@link ImageLoadingListener#onLoadingComplete(String, android.view.View, android.graphics.Bitmap)} callback}. * <br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri              Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param targetImageSize  Minimal size for {@link Bitmap} which will be returned in *                         {@linkplain ImageLoadingListener#onLoadingComplete(String, android.view.View, *                         android.graphics.Bitmap)} callback}. Downloaded image will be decoded *                         and scaled to {@link Bitmap} of the size which is <b>equal or larger</b> (usually a bit *                         larger) than incoming targetImageSize. * @param options          {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                         decoding and displaying. If <b>null</b> - default display image options *                         {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                         from configuration} will be used.<br /> * @param listener         {@linkplain ImageLoadingListener Listener} for image loading process. Listener fires *                         events on UI thread if this method is called on UI thread. * @param progressListener {@linkplain com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener *                         Listener} for image loading progress. Listener fires events on UI thread if this method *                         is called on UI thread. Caching on disk should be enabled in *                         {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions options} to make *                         this listener work. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {checkConfiguration();if (targetImageSize == null) {targetImageSize = configuration.getMaxImageSize();}if (options == null) {options = configuration.defaultDisplayImageOptions;}NonViewAware imageAware = new NonViewAware(uri, targetImageSize, ViewScaleType.CROP);displayImage(uri, imageAware, options, listener, progressListener);}/** * Loads and decodes image synchronously.<br /> * Default display image options * {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) from * configuration} will be used.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @return Result image Bitmap. Can be <b>null</b> if image loading/decoding was failed or cancelled. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public Bitmap loadImageSync(String uri) {return loadImageSync(uri, null, null);}/** * Loads and decodes image synchronously.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri     Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param options {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                decoding and scaling. If <b>null</b> - default display image options *                {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) from *                configuration} will be used. * @return Result image Bitmap. Can be <b>null</b> if image loading/decoding was failed or cancelled. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public Bitmap loadImageSync(String uri, DisplayImageOptions options) {return loadImageSync(uri, null, options);}/** * Loads and decodes image synchronously.<br /> * Default display image options * {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) from * configuration} will be used.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri             Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param targetImageSize Minimal size for {@link Bitmap} which will be returned. Downloaded image will be decoded *                        and scaled to {@link Bitmap} of the size which is <b>equal or larger</b> (usually a bit *                        larger) than incoming targetImageSize. * @return Result image Bitmap. Can be <b>null</b> if image loading/decoding was failed or cancelled. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public Bitmap loadImageSync(String uri, ImageSize targetImageSize) {return loadImageSync(uri, targetImageSize, null);}/** * Loads and decodes image synchronously.<br /> * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call * * @param uri             Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png") * @param targetImageSize Minimal size for {@link Bitmap} which will be returned. Downloaded image will be decoded *                        and scaled to {@link Bitmap} of the size which is <b>equal or larger</b> (usually a bit *                        larger) than incoming targetImageSize. * @param options         {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image *                        decoding and scaling. If <b>null</b> - default display image options *                        {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions) *                        from configuration} will be used. * @return Result image Bitmap. Can be <b>null</b> if image loading/decoding was failed or cancelled. * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public Bitmap loadImageSync(String uri, ImageSize targetImageSize, DisplayImageOptions options) {if (options == null) {options = configuration.defaultDisplayImageOptions;}options = new DisplayImageOptions.Builder().cloneFrom(options).syncLoading(true).build();SyncImageLoadingListener listener = new SyncImageLoadingListener();loadImage(uri, targetImageSize, options, listener);return listener.getLoadedBitmap();}/** * Checks if ImageLoader's configuration was initialized * * @throws IllegalStateException if configuration wasn't initialized */private void checkConfiguration() {if (configuration == null) {throw new IllegalStateException(ERROR_NOT_INIT);}}/** Sets a default loading listener for all display and loading tasks. */public void setDefaultLoadingListener(ImageLoadingListener listener) {defaultListener = listener == null ? new SimpleImageLoadingListener() : listener;}/** * Returns memory cache * * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public MemoryCache getMemoryCache() {checkConfiguration();return configuration.memoryCache;}/** * Clears memory cache * * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public void clearMemoryCache() {checkConfiguration();configuration.memoryCache.clear();}/** * Returns disk cache * * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @deprecated Use {@link #getDiskCache()} instead */@Deprecatedpublic DiskCache getDiscCache() {return getDiskCache();}/** * Returns disk cache * * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public DiskCache getDiskCache() {checkConfiguration();return configuration.diskCache;}/** * Clears disk cache. * * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before * @deprecated Use {@link #clearDiskCache()} instead */@Deprecatedpublic void clearDiscCache() {clearDiskCache();}/** * Clears disk cache. * * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before */public void clearDiskCache() {checkConfiguration();configuration.diskCache.clear();}/** * Returns URI of image which is loading at this moment into passed * {@link com.nostra13.universalimageloader.core.imageaware.ImageAware ImageAware} */public String getLoadingUriForView(ImageAware imageAware) {return engine.getLoadingUriForView(imageAware);}/** * Returns URI of image which is loading at this moment into passed * {@link android.widget.ImageView ImageView} */public String getLoadingUriForView(ImageView imageView) {return engine.getLoadingUriForView(new ImageViewAware(imageView));}/** * Cancel the task of loading and displaying image for passed * {@link com.nostra13.universalimageloader.core.imageaware.ImageAware ImageAware}. * * @param imageAware {@link com.nostra13.universalimageloader.core.imageaware.ImageAware ImageAware} for *                   which display task will be cancelled */public void cancelDisplayTask(ImageAware imageAware) {engine.cancelDisplayTaskFor(imageAware);}/** * Cancel the task of loading and displaying image for passed * {@link android.widget.ImageView ImageView}. * * @param imageView {@link android.widget.ImageView ImageView} for which display task will be cancelled */public void cancelDisplayTask(ImageView imageView) {engine.cancelDisplayTaskFor(new ImageViewAware(imageView));}/** * Denies or allows ImageLoader to download images from the network.<br /> * <br /> * If downloads are denied and if image isn't cached then * {@link ImageLoadingListener#onLoadingFailed(String, View, FailReason)} callback will be fired with * {@link FailReason.FailType#NETWORK_DENIED} * * @param denyNetworkDownloads pass <b>true</b> - to deny engine to download images from the network; <b>false</b> - *                             to allow engine to download images from network. */public void denyNetworkDownloads(boolean denyNetworkDownloads) {engine.denyNetworkDownloads(denyNetworkDownloads);}/** * Sets option whether ImageLoader will use {@link FlushedInputStream} for network downloads to handle <a * href="http://code.google.com/p/android/issues/detail?id=6066">this known problem</a> or not. * * @param handleSlowNetwork pass <b>true</b> - to use {@link FlushedInputStream} for network downloads; <b>false</b> *                          - otherwise. */public void handleSlowNetwork(boolean handleSlowNetwork) {engine.handleSlowNetwork(handleSlowNetwork);}/** * Pause ImageLoader. All new "load&display" tasks won't be executed until ImageLoader is {@link #resume() resumed}. * <br /> * Already running tasks are not paused. */public void pause() {engine.pause();}/** Resumes waiting "load&display" tasks */public void resume() {engine.resume();}/** * Cancels all running and scheduled display image tasks.<br /> * <b>NOTE:</b> This method doesn't shutdown * {@linkplain com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder#taskExecutor(java.util.concurrent.Executor) * custom task executors} if you set them.<br /> * ImageLoader still can be used after calling this method. */public void stop() {engine.stop();}/** * {@linkplain #stop() Stops ImageLoader} and clears current configuration. <br /> * You can {@linkplain #init(ImageLoaderConfiguration) init} ImageLoader with new configuration after calling this * method. */public void destroy() {if (configuration != null) L.d(LOG_DESTROY);stop();configuration.diskCache.close();engine = null;configuration = null;}private static Handler defineHandler(DisplayImageOptions options) {Handler handler = options.getHandler();if (options.isSyncLoading()) {handler = null;} else if (handler == null && Looper.myLooper() == Looper.getMainLooper()) {handler = new Handler();}return handler;}/** * Listener which is designed for synchronous image loading. * * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) * @since 1.9.0 */private static class SyncImageLoadingListener extends SimpleImageLoadingListener {private Bitmap loadedImage;@Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {this.loadedImage = loadedImage;}public Bitmap getLoadedBitmap() {return loadedImage;}}}


0 0
原创粉丝点击