Imageloader

使用该开源项目的之前,先给该开源项目在Github上的地址吧。

ImageLoader在GitHub


开始的时候,自己看得也是很头痛,因为许多自己不要的东西上面配置的也多,下面简单给有需要的童鞋介绍下使用吧,暂不涉及太多的东西。

我们看看项目的结构:

Imageloader

这里有四个例子,针对ListView ,Gallery ,GridView和Viewpager大量使用图片,做了简单的使用示例。

里面写的很复杂,入门的话,也许要看许久,现在省略理论的那些东西,说下直接点的。

下面是一般的使用步骤:

        1.重写application,并初始化配置,在这有缓存图片和不缓存图片两种设置:

       在这之前,你需要倒入demo中的jar包,这个没啥说的。

 在oncreate()中添加:

1.未缓存图片:

[html] view plaincopyprint?在CODE上查看代码片

  1. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())  

  2.                 .threadPriority(Thread.NORM_PRIORITY - 2)  

  3.                 .denyCacheImageMultipleSizesInMemory()  

  4.                 .discCacheFileNameGenerator(new Md5FileNameGenerator())  

  5.                 .tasksProcessingOrder(QueueProcessingType.LIFO)  

  6.                 .enableLogging() // Not necessary in common  

  7.                 .build();  

  8.         ImageLoader.getInstance().init(config);  

2.缓存图片:

[html] view plaincopyprint?在CODE上查看代码片

  1. DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()  

  2.                 .cacheInMemory().cacheOnDisc().build();  

  3.   

  4.         ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(  

  5.                 context).defaultDisplayImageOptions(defaultOptions)  

  6.                 .threadPriority(Thread.NORM_PRIORITY - 2)  

  7.                 .denyCacheImageMultipleSizesInMemory()  

  8.                 .discCacheFileNameGenerator(new Md5FileNameGenerator())  

  9.                 .tasksProcessingOrder(QueueProcessingType.LIFO).build();  

  10.         ImageLoader.getInstance().init(config);  


在使用ImageLoader的实例之前,你需要初始化该配置,否则会报初始化错误。一般我们直接写在application中初始化。


在初始化配置完成后,在清单中写入你自定义的application,并写入访问权限。

[html] view plaincopyprint?在CODE上查看代码片

  1. <uses-permission android:name="android.permission.INTERNET" />  

  2.    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

  3.   

  4.    <application  

  5.        android:name="com.demo.DemoApp"  


       2.在activity中加载图片,这里针对不同的参数,可能使用的方法和配置也不咋相同:

其实对于图片的加载主要有三种方法:

                1.displayImages及其重载,在Imageview组件中直接加载图片。

[html] view plaincopyprint?在CODE上查看代码片

  1. public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,  

  2.             ImageLoadingListener listener, ImageLoadingProgressListener progressListener)  

其同名的重载方法,使用的多的是下面几个:        

直接加载:

[html] view plaincopyprint?在CODE上查看代码片

  1. public void displayImage(String uri, ImageAware imageAware) {  

  2.         displayImage(uri, imageAware, null, null, null);  

  3.     }  

选项加载:

[html] view plaincopyprint?在CODE上查看代码片

  1. public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options) {  

  2.         displayImage(uri, imageAware, options, null, null);  

  3.     }  


带监听加载:

[html] view plaincopyprint?在CODE上查看代码片

  1. public void displayImage(String uri, ImageAware imageAware, ImageLoadingListener listener) {  

  2.         displayImage(uri, imageAware, null, listener, null);  

  3.     }  


选项+监听加载:

[html] view plaincopyprint?在CODE上查看代码片

  1. public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,  

  2.             ImageLoadingListener listener) {  

  3.         displayImage(uri, imageAware, options, listener, null);  

  4.     }  

2.loadImages及其重载,它的内部其实也会调用displayImages方法:

[html] view plaincopyprint?在CODE上查看代码片

  1. public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,  

  2.             ImageLoadingListener listener, ImageLoadingProgressListener progressListener)  

主要的是那个监听的方法ImageLoadListener,会监听开始,失败,完成和取消的状态。在完成后,会返回bitmap对象。

[html] view plaincopyprint?在CODE上查看代码片

  1. void onLoadingComplete(String imageUri, View view, Bitmap loadedImage);  

3.loadImageSync及其重载,它会返回一个Bitmap对象,自定义View的时候,需要bitmap来绘制图形,就可以使用该方法了。

[html] view plaincopyprint?在CODE上查看代码片

  1. public Bitmap loadImageSync(String uri, ImageSize targetImageSize, DisplayImageOptions options)  



加载的方法说完了,下面来谈谈选项:

[html] view plaincopyprint?在CODE上查看代码片

  1. public final class DisplayImageOptions {  

  2.   

  3.     private final int imageResOnLoading;  

  4.     private final int imageResForEmptyUri;  

  5.     private final int imageResOnFail;  

  6.     private final Drawable imageOnLoading;  

  7.     private final Drawable imageForEmptyUri;  

  8.     private final Drawable imageOnFail;  

  9.     private final boolean resetViewBeforeLoading;  

  10.     private final boolean cacheInMemory;  

  11.     private final boolean cacheOnDisk;  

  12.     private final ImageScaleType imageScaleType;  

  13.     private final Options decodingOptions;  

  14.     private final int delayBeforeLoading;  

  15.     private final boolean considerExifParams;  

  16.     private final Object extraForDownloader;  

  17.     private final BitmapProcessor preProcessor;  

  18.     private final BitmapProcessor postProcessor;  

  19.     private final BitmapDisplayer displayer;  

  20.     private final Handler handler;  

  21.     private final boolean isSyncLoading;  

  22.   

  23.     private DisplayImageOptions(Builder builder) {  

  24.         imageResOnLoading = builder.imageResOnLoading;  

  25.         imageResForEmptyUri = builder.imageResForEmptyUri;  

  26.         imageResOnFail = builder.imageResOnFail;  

  27.         imageOnLoading = builder.imageOnLoading;  

  28.         imageForEmptyUri = builder.imageForEmptyUri;  

  29.         imageOnFail = builder.imageOnFail;  

  30.         resetViewBeforeLoading = builder.resetViewBeforeLoading;  

  31.         cacheInMemory = builder.cacheInMemory;  

  32.         cacheOnDisk = builder.cacheOnDisk;  

  33.         imageScaleType = builder.imageScaleType;  

  34.         decodingOptions = builder.decodingOptions;  

  35.         delayBeforeLoading = builder.delayBeforeLoading;  

  36.         considerExifParams = builder.considerExifParams;  

  37.         extraForDownloader = builder.extraForDownloader;  

  38.         preProcessor = builder.preProcessor;  

  39.         postProcessor = builder.postProcessor;  

  40.         displayer = builder.displayer;  

  41.         handler = builder.handler;  

  42.         isSyncLoading = builder.isSyncLoading;  

  43.     }  


这个看自己的需要配置,各个参数的作用跟它的英文意思一样,认真看下大概就明白了,没必要所有的都去配置,下面是一般使用的选项参数:

缓存图片:

[html] view plaincopyprint?在CODE上查看代码片

  1. DisplayImageOptions   options = new DisplayImageOptions.Builder()    

  2.             .showStubImage(R.drawable.ic_stub)          // 设置图片下载期间显示的图片    

  3.             .showImageForEmptyUri(R.drawable.ic_empty)  // 设置图片Uri为空或是错误的时候显示的图片    

  4.             .showImageOnFail(R.drawable.ic_error)       // 设置图片加载或解码过程中发生错误显示的图片        

  5.             .cacheInMemory(true)                        // 设置下载的图片是否缓存在内存中    

  6.             .cacheOnDisc(true)                          // 设置下载的图片是否缓存在SD卡中    

  7.             .displayer(new RoundedBitmapDisplayer(20))  // 设置成圆角图片    

  8.             .build();                                   // 创建配置过得DisplayImageOption对象   

  9.   

  10.     ImageLoader.getInstance().displayImage(url, imageView, options);    


好了,基本的步骤就差不多了。

效果(图片来自百度图库):

Imageloader

demo下载


注意:

1.但是要注意传入的URI ,要分网络地址和本地地址,我这传入的是本地图片地址。

对该方法的说明:

[html] view plaincopyprint?在CODE上查看代码片

  1. /**  

  2.      * Adds display image task to execution pool. Image will be set to ImageView when it's turn.<br />  

  3.      * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call  

  4.      *  

  5.      * @param uri       Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png")  

  6.      * @param imageView {@link ImageView} which should display image  

  7.      * @param options   {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image  

  8.      *                  decoding and displaying. If <b>null</b> - default display image options  

  9.      *                  {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions)  

  10.      *                  from configuration} will be used.  

  11.      * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn't called before  

  12.      * @throws IllegalArgumentException if passed <b>imageView</b> is null  

  13.      */  

  14.     public void displayImage(String uri, ImageView imageView, DisplayImageOptions options) {  

  15.         displayImage(uri, new ImageViewAware(imageView), options, null, null);  

  16.     }  


对于本地的图片 ,在其绝对地址前面要加入"file://"。网络图片就直接写路径了。

由于我的这个是最新的包,可能跟以前老的版本不同,看到有些网友说的是:

[html] view plaincopyprint?在CODE上查看代码片

  1. String imageUri = "http://site.com/image.png"; // 网络图片  

  2. String imageUri = "file:///mnt/sdcard/image.png"; //SD卡图片  

  3. String imageUri = "content://media/external/audio/albumart/13"; // 媒体文件夹  

  4. String imageUri = "assets://image.png"; // assets  

  5. String imageUri = "drawable://" + R.drawable.image; //  drawable文件   


2.:Unable to resolve target 'android-19' 错误:

修改编译的版本为你现在有的版本,或者升级你的版本到19.然后在project.properties中修改你的版本号跟编译的版本号相同。


你可能感兴趣的:(Imageloader)