Universal-Image-Loader初认识

Universal-Image-Loader是一个应用广泛的图片下载开源库,可以节省开发时很多工程量

下面根据源码内文档初步认识下这个三方库

1.特性

*多线程图片下载(同步或异步)Multithreadimage loading (async or sync)

 * 广泛的自定义配置(线程池、下载器、解码器、内存与缓存、图片显示设置等)Wide customization of ImageLoader's configuration (threadexecutors, downloader, decoder, memory and disk cache, display image options,etc.)

 * 许多自定义选项提供给图片显示(存根图片、缓存开关、解码选项、位图下载显示灯)Many customization options for every display image call (stubimages, caching switch, decoding options, Bitmap processing and displaying,etc.)

 *图片缓存在内存或硬盘上(设备文件系统或SD卡) Imagecaching in memory and/or on disk (device's file system or SD card)

 *过程监听(包括下载进程)Listeningloading process (including downloading progress)

 

2.导入此库到工程中去

下载好jar文件放到工程目录下libs目录中

或者

使用maven库

<dependency>

         <groupId>com.nostra13.universalimageloader</groupId>

         <artifactId>universal-image-loader</artifactId>

         <version>1.9.3</version>

</dependency>

 

3.AndroidManifest.xml中应声明需要的权限

<manifest>

         <!—从互联网下载图片Include following permission if you load images from Internet -->

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

         <!—需要在SD卡上缓存 Includefollowing permission if you want to cache images on SD card -->

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

         ...

</manifest>

 

4.你可以在Application或Activity中进行初始化(在第一次使用ImageLoader之前)

@Override

         publicvoid onCreate() {

                   super.onCreate();

                   //Create global configuration and initialize ImageLoader with this config

                   ImageLoaderConfigurationconfig = new ImageLoaderConfiguration.Builder(this)

                            ...

                            .build();

                   ImageLoader.getInstance().init(config);

                   ...

         }

5.Configuration和DisplayOptions

Configuration所有可选选项如下:

StorageUtils.getCacheDirectory方法将会根据是否拥有读取外部SD权限以及是否存在SD卡来选择缓存目录,优先选择SD卡

File cacheDir =StorageUtils.getCacheDirectory(context);

也可以通过StorageUtils.getOwnCacheDirectory(Context context, String cacheDir)设置自己的缓存目录,优先选择SD卡

 

ImageLoaderConfiguration config = newImageLoaderConfiguration.Builder(context)

                   .memoryCacheExtraOptions(480,800) //第一个参数内存缓存图片宽、第二个为高默认设置为设备屏幕尺寸

                   .diskCacheExtraOptions(480,800, null)//此项设置除非必要不要设置,会导致下载速度变慢,缓存在硬盘上的设置,第1个参数宽,第二个参数高,第三个参数图片处理实例

                   .taskExecutor(...)//自定义线程池,使用此属性threadPoolSize、threadPriority、tasksProcessingOrder(QueueProcessingType)无效

                   .taskExecutorForCachedImages(...)//自定义图片显示线程池,threadPoolSize、threadPriority、tasksProcessingOrder(QueueProcessingType)无效

                   .threadPoolSize(3)// 图片显示线程池大小,默认3

                   .threadPriority(Thread.NORM_PRIORITY- 2) // 默认为Thread.NORM_PRIORITY - 2  此值在Thread.MIN_PRIORITY与Thread.MAX_PRIORITY之间

                   .tasksProcessingOrder(QueueProcessingType.FIFO)// 下载与显示线程队列顺序默认QueueProcessingType.FIFO

                   .denyCacheImageMultipleSizesInMemory()//不保存多种尺寸图片

                   .memoryCache(newLruMemoryCache(2 * 1024 * 1024))//实现MemoryCache接口或用LruMemoryCache类

                   .memoryCacheSize(2* 1024 * 1024)//内存缓存大小,单位byte,默认为1/8应用内存

                   .memoryCacheSizePercentage(13)// 百分比设置缓存大小,默认1/8

                   .diskCache(newUnlimitedDiscCache(cacheDir)) // 默认大小无限制,路径由StorageUtils.getCacheDirectory(Context)决定,自己设置下面3属性失效

                   .diskCacheSize(50* 1024 * 1024)//硬盘缓存区大小,默认无限制

                   .diskCacheFileCount(100)//硬盘缓存区文件数量,默认无限制

                   .diskCacheFileNameGenerator(newHashCodeFileNameGenerator()) //图片文件名生成器,默认返回图片链接的hashcode

                   .imageDownloader(newBaseImageDownloader(context)) // 图片下载器,默认DefaultConfigurationFactory.createImageDownloader()

                   .imageDecoder(newBaseImageDecoder()) //图片解码器,默认DefaultConfigurationFactory.createImageDecoder()

                   .defaultDisplayImageOptions(DisplayImageOptions.createSimple())//默认图片显示选项

                   .writeDebugLogs()//保存调试Log信息,完全关闭使用com.nostra13.universalimageloader.utils.L#disableLogging()方法

                   .build();

 

Display Options

如果不将此选项传给ImageLoader.displayImage(...)将使用默认显示选项

所有可选项如下

DisplayImageOptions options = newDisplayImageOptions.Builder()

                   .showImageOnLoading(R.drawable.ic_stub)//下载中显示的图片,可以为图片资源ID,也可以是Drawable对象

                   .showImageForEmptyUri(R.drawable.ic_empty)// 图片链接不存在或空时显示的图片,可以为图片资源ID,或Drawable对象

                   .showImageOnFail(R.drawable.ic_error)// 图片下载、解码时出错显示的图片,可以为图片资源ID或Drawable对象

                   .resetViewBeforeLoading(false)  // 下载图片前是否重置图片显示组件

                   .delayBeforeLoading(1000)//开始下载任务前延时多久,单位毫秒,默认无延迟

                   .cacheInMemory(false)// 下载图片是否在内存中缓存,默认false

                   .cacheOnDisk(false)// 下载图片是否在硬盘上缓存,默认false

                   .preProcessor(...)缓存前图片处理器

                   .postProcessor(...)显示前图片处理器

                   .extraForDownloader(...)//辅助参数传给ImageDownloader#getStream(String,Object)第二个Object

                   .considerExifParams(false)// 是否考虑EXIF信息,默认false

                   .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// 默认为IN_SAMPLE_POWER_OF_2图片缩小2倍,等待下一步处理以适应目标尺寸,可选NONE不缩放,NONE_SAFE缩放至可接受的最大尺寸,通常是2048*2048,IN_SAMPLE_INT,EXACTLY缩放到指定尺寸,EXACTLY_STRETCHED缩放到指定尺寸,如果原图小于指定尺寸则拉伸

                   .bitmapConfig(Bitmap.Config.ARGB_8888)// 图片质量参数,默认为ARGB_8888,图片较大,可选有ALPHA_8,ARGB_4444,RGB_565

                   .decodingOptions(...)//解码选项,

                   .displayer(newSimpleBitmapDisplayer()) // 默认new SimpleBitmapDisplayer()

                   .handler(newHandler()) // 自定义hanlder处理显示以及过程中的信息

                   .build();

 

6.可接受的图片Uri

String imageUri ="http://site.com/image.png"; // from Web

String imageUri ="file:///mnt/sdcard/image.png"; // from SD card

String imageUri ="content://media/external/audio/albumart/1"; // from content provider

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

String imageUri = "drawable://" +R.drawable.img; // from drawables (non-9patch images)

drawable://这种形式除非真正需要,推荐使用官方方法setImageSource()

 

7.一些处理形式

简单处理的3种形式:

直接显示在可以显示图片的组件上

例如imageLoader.displayImage(imageUri, imageView);

使用监听器在下载完成时处理

imageLoader.loadImage(imageUri, newSimpleImageLoadingListener() {

         @Override

         publicvoid onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                   //Do whatever you want with Bitmap

         }

});

同步返回Bitmap对象

Bitmap bmp =imageLoader.loadImageSync(imageUri);

完整的处理形式如下:

imageLoader.displayImage(imageUri,imageView, options, new ImageLoadingListener() {

         @Override

         publicvoid onLoadingStarted(String imageUri, View view) {

                   ...

         }

         @Override

         publicvoid onLoadingFailed(String imageUri, View view, FailReason failReason) {

                   ...

         }

         @Override

         publicvoid onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                  ...

         }

         @Override

         publicvoid onLoadingCancelled(String imageUri, View view) {

                   ...

         }

}, new ImageLoadingProgressListener() {

         @Override

         publicvoid onProgressUpdate(String imageUri, View view, int current, int total) {

                   ...

         }

});

 

ImageSize targetSize = new ImageSize(80,50); // result Bitmap will be fit to this size

imageLoader.loadImage(imageUri, targetSize,options, new SimpleImageLoadingListener() {

         @Override

         publicvoid onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                   //Do whatever you want with Bitmap

         }

});

 

ImageSize targetSize = new ImageSize(80,50); // result Bitmap will be fit to this size

Bitmap bmp =imageLoader.loadImageSync(imageUri, targetSize, options);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值