Universal-Image-Loader的使用

Universal-Image-Loader的使用

特征:

1. 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
2. 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
3. 支持图片的内存缓存,文件系统缓存或者SD卡缓存
4. 支持图片下载过程的监听
5. 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
6. 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
7. 提供在较慢的网络下对图片进行加载

用法:

1. 创建imageloader的配置参数
    - 默认的(createDefault)
    - 自定义
2. 调用imagloader的init方法,将配置参数传递进去
3. 加载图片
    - imagloader提供了两种方法:
        - loaderimage
        - displayImage
        - 开发中尽量用displayImage方法
            - 1:代码简单
            - 2:可以使用对于loaderImage失效的showImageonLoading,showImageForEmptyUri等
            - 3:可以根据控件大小和ImagerScaleType来自动的裁剪图片--实现方法:可以通过创建imageLoader配置参数的时候用ImagerloaderConfiguration方式,在选项中进行设置:memoryCacheExtraOptions()
            - 4:displayImage()中Imageview对象使用的是weak refrence方便垃圾回收器回收对象

加载图片的时候显示加载进度:

- 用displayImage方法加载图片
- 在方法中传入接口imageloadingProgressListener
- new一个SimpleImageLoadingListener()
- 实现onProgressUpdate方法中得到图片的加载进度

加载不同来源的图片:

- 本地,asset,drawable都只需要用scheme包一下就行了,Content provider特殊一点
- 本地:String imageUrl = Scheme.FILE.wrap(imagePath);
- asset:String assetsUrl = Scheme.ASSETS.wrap("image.png");
- drawable:String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image"); 
- Content provider: String contentprividerUrl = "content://media/external/audio/albumart/13"

GirdView,ListView加载图片滑动时暂停:

- 用PauseOnScrollListener这个类实现(代理模式)
- listview.setonScrollListener(new PauseOnScrollListener(imageloader,pauseOnScroll,pauseOnFling))
- 参一:imageloader,就是图片加载对象imageloader:ImageLoader.getInstance()
- 参二:pauseOnScroll,滑动的时候是否暂停加载,是:true
- 参三:pauseOnFling,猛动的时候是否暂停加载,是:true

避免OOM:

- 1:减少线程池的个数,在imageLoaderConfiguration中的选项threadPoolsize中配置
- 2:在imageloaderConfiguration中配置图片的缓存为memoryCache(new WeakMemoryCache())--容易被垃圾回收器回收
- 3:在displayOptions选项中配置bitmapConfig为:bitmap.Config.RGB_565,比默认的bitmapConfig(Bitmap.Config.ARGB_8888)内存消耗少两倍
- 4:在displayOptions选项中设置imageScaleType(ImageScaleType.IN_SAMPLE_INT)或imageScaleType(ImageScaleType.EXACTLY)

事例代码:

方式一:

1. 配置参数默认
2. 用loaderImage方法加载
3. loaderImager用监听接口ImageLoadingListener

代码如下:

        //1:创建imageloader配置参数(默认方式)
        ImageLoaderConfiguration config = ImageLoaderConfiguration.createDefault(this);

        //2:将配置参数传递进Imageloader
        ImageLoader.getInstance().init(config);

        //为加载图片的操作准备参数
        //参一:url
        String imagUrl = "http://c.hiphotos.baidu.com/zhidao/pic/item/902397dda144ad348b212897d1a20cf431ad8500.jpg";
        //参二:displayImageOptions图片显示参数
        DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
                                            //.showImageOnLoading(R.drawable.ic_stub) // resource or drawable
                                            //.showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable
                                            //.showImageOnFail(R.drawable.ic_error) // resource or drawable
                                            //.resetViewBeforeLoading(false)  // default
                                            //.delayBeforeLoading(1000)
                                            .cacheInMemory(true) // 内存缓存
                                            .cacheOnDisk(true) // 本地缓存
                                            //.preProcessor(...)
                                            //.postProcessor(...)
                                            //.extraForDownloader(...)
                                            //.considerExifParams(false) // default
                                            //.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
                                            //.bitmapConfig(Bitmap.Config.ARGB_8888) // default
                                            //.decodingOptions(...)
                                            //.displayer(new SimpleBitmapDisplayer()) // default
                                            //.handler(new Handler()) // default
                                            .build();
        //3:加载图片操作
        ImageLoader.getInstance().loadImage(imagUrl, imageOptions, new ImageLoadingListener() {

            //加载开始时调用
            @Override
            public void onLoadingStarted(String imageUri, View view) {

            }

            //加载失败调用
            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

            }

            //加载完成调用
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                mimageView.setImageBitmap(loadedImage);
            }

            //加载取消调用
            @Override
            public void onLoadingCancelled(String imageUri, View view) {

            }
        });

方式二:

1. 配置参数自定义
2. 用loaderImage方法加载
3. loaderImager用接口实现类:SimpleImageLoadingListener,该类提供了ImageLoadingListener的实现参数,用的是缺省适配器模式

代码如下:

        //1:创建imageloader配置参数(自定义)
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
                                        //.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
                                        //.diskCacheExtraOptions(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
                                        //.diskCache(new UnlimitedDiscCache(cacheDir)) // default
                                        //.diskCacheSize(50 * 1024 * 1024)
                                        //.diskCacheFileCount(100)
                                        //.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
                                        //.imageDownloader(new BaseImageDownloader(context)) // default
                                        //.imageDecoder(new BaseImageDecoder()) // default
                                        //.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                                        //.writeDebugLogs()
                                        .build();
        //2:将配置参数传递进Imageloader
        ImageLoader.getInstance().init(config);
        //为加载图片的操作准备参数
        //参一:url
        String imagUrl = "http://c.hiphotos.baidu.com/zhidao/pic/item/902397dda144ad348b212897d1a20cf431ad8500.jpg";
        //参二:displayImageOptions
        DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
                                            //.showImageOnLoading(R.drawable.ic_stub) // resource or drawable
                                            //.showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable
                                            //.showImageOnFail(R.drawable.ic_error) // resource or drawable
                                            //.resetViewBeforeLoading(false)  // default
                                            //.delayBeforeLoading(1000)
                                            .cacheInMemory(true) // 内存缓存
                                            .cacheOnDisk(true) // 本地缓存
                                            //.preProcessor(...)
                                            //.postProcessor(...)
                                            //.extraForDownloader(...)
                                            //.considerExifParams(false) // default
                                            //.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
                                            //.bitmapConfig(Bitmap.Config.ARGB_8888) // default
                                            //.decodingOptions(...)
                                            //.displayer(new SimpleBitmapDisplayer()) // default
                                            //.handler(new Handler()) // default
                                            .build();
        //3:加载图片操作
        ImageLoader.getInstance().loadImage(imagUrl,imageOptions, new SimpleImageLoadingListener(){
                    @Override
                    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                        mimageView.setImageBitmap(loadedImage);
                    }
                }
        );

方式三:

1. 配置自定义
2. 用display方法加载
3. loaderImager用接口实现类:SimpleImageLoadingListener,该类提供了ImageLoadingListener的实现参数,用的是缺省适配器模式

代码如下:

         //1:创建imagloader的配置参数
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
                                            //.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
                                            //.diskCacheExtraOptions(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
                                            //.diskCache(new UnlimitedDiscCache(cacheDir)) // default
                                            //.diskCacheSize(50 * 1024 * 1024)
                                            //.diskCacheFileCount(100)
                                            //.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
                                            //.imageDownloader(new BaseImageDownloader(context)) // default
                                            //.imageDecoder(new BaseImageDecoder()) // default
                                            //.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                                            //.writeDebugLogs()
                                            .build();
        //2:将配置参数传递进imagloader
        ImageLoader.getInstance().init(config);
        //3:加载图片
        //为加载图片的操作准备参数
        //参一:url
        String imageUrl = "http://image.xinmin.cn/2013/02/08/20130208110749528036.jpg";
        //参二:显示图片的控件mimagerview
        //参三:displayimageroptions图片显示参数
        DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
                                            //.showImageOnLoading(R.drawable.ic_stub) // resource or drawable
                                            //.showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable
                                            //.showImageOnFail(R.drawable.ic_error) // resource or drawable
                                            //.resetViewBeforeLoading(false)  // default
                                            //.delayBeforeLoading(1000)
                                            .cacheInMemory(true) // 内存缓存
                                            .cacheOnDisk(true) // 本地缓存
                                            //.preProcessor(...)
                                            //.postProcessor(...)
                                            //.extraForDownloader(...)
                                            //.considerExifParams(false) // default
                                            //.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
                                            //.bitmapConfig(Bitmap.Config.ARGB_8888) // default
                                            //.decodingOptions(...)
                                            //.displayer(new SimpleBitmapDisplayer()) // default
                                            //.handler(new Handler()) // default
                                            .build();
        ImageLoader.getInstance().displayImage(imageUrl,mimageView,imageOptions);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值