一、简单介绍
imageloader 即 Android-Universal-Image-Loader是一个开源的UI组件程序。开发人员使用它,可是很轻松的加载网络上的图片,它具体一下优点:
- 支持多线程图片加载
- 提供丰富的细节配置,比如线程池大小,HTPP请求项,内存和磁盘缓存,图片显示时的参数配置等等;
- 提供双缓存
- 支持加载过程的监听;
- 提供图片的个性化显示配置接口;
二、使用实例
例如,最近在做webRTC的一个项目,服务器上创建房间后,需要将房间信息生成一个二维码,客户端需要将此二维码显示出来。服务器端生成二维码后,给我的客户端返回一个下载地址,如http://***.***.***.***/getQr?roomName=" + params.roomId + "&passwd=" + params.clientId,这是一个下载地址,并不是一个服务器上图片的地址。把这个地址放在浏览器中,立即可以显示一张图片,因为浏览器使用http请求把此下载地址的图片加载过来了。
那么对于android 客户端而言,此地址不是一张图片,当前不能直接使用imageview.setBackground(new BitmapDrawable(imageAddre)) 这个来直接显示此二维码。
所以,要想解决此问题,需要用来开源的Imageloader。
方案:使用ImageLoader加载网络图片
1、创建imageLoader对象
ImageLoader imageLoader = ImageLoader.getInstance();//注意,imageloader使用的是单例模式,
2、初始化
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).build();
imageLoader.init(config);
config可以自己配置:如:
- ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
- .memoryCacheExtraOptions(480, 800) // default = device screen dimensions
- .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)
- .taskExecutor(...)
- .taskExecutorForCachedImages(...)
- .threadPoolSize(3) // default
- .threadPriority(Thread.NORM_PRIORITY - 1) // default
- .tasksProcessingOrder(QueueProcessingType.FIFO) // default
- .denyCacheImageMultipleSizesInMemory()
- .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
- .memoryCacheSize(2 * 1024 * 1024)
- .memoryCacheSizePercentage(13) // default
- .discCache(new UnlimitedDiscCache(cacheDir))// default
- .discCacheSize(50 * 1024 * 1024) // 缓冲大小
- .discCacheFileCount(100) // 缓冲文件数目
- .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
- .imageDownloader(new BaseImageDownloader(context)) // default
- .imageDecoder(new BaseImageDecoder()) // default
- .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
- .writeDebugLogs()
- .build();
3、imageloader加载图片
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.two_dimension_codel) // image在加载过程中,显示的图片
.showImageForEmptyUri(R.drawable.two_dimension_codel) // empty URI时显示的图片
.showImageOnFail(R.drawable.two_dimension_codel) // 不是图片文件 显示图片
.resetViewBeforeLoading() // default
.delayBeforeLoading(1000)
.cacheInMemory() // default 不缓存至内存
.cacheOnDisc() // default 不缓存至手机SDCard
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// default
.bitmapConfig(Bitmap.Config.RGB_565) // default
.displayer(new SimpleBitmapDisplayer()) // default 可以设置动画,比如圆角或者渐变
//.displayer(new RoundedBitmapDisplayer(200))
.displayer(new FadeInBitmapDisplayer(500))//是否图片加载好后渐入的动画时间
.handler(new Handler()) // default
.build();
imageLoader.displayImage(imageStr, imageview,options);