文章标题

Universal-Image-Loader使用解析

ImageLoader有什么功能

  • (1).使用多线程加载图片
  • (2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等;
  • (3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
  • (4).采用监听器监听图片加载过程及相应事件的处理;
  • (5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。

ImageLoader用法

  • 1、初始化:创建默认的ImageLoader配置参数
    • ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
    • 最后实例以及初始化:ImageLoader.getInstance().init(configuration);
  • 2、DisplayImageOptions:ImageLoader.getInstance().displayImage()中的参数,
    常用配置:
DisplayImageOptions options = new DisplayImageOptions.Builder()  
        .showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片  
        .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片  
        .showImageOnFail(R.drawable.error)  //设置图片加载/解码过程中错误时候显示的图片
        .cacheInMemory(true)//设置下载的图片是否缓存在内存中  
        .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中  
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示  
        .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型
        .build();//构建完成

全部设置:

DisplayImageOptions options = new DisplayImageOptions.Builder()  
        .showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片  
        .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片  
        .showImageOnFail(R.drawable.error)  //设置图片加载/解码过程中错误时候显示的图片
        .cacheInMemory(true)//设置下载的图片是否缓存在内存中  
        .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中  
        .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示  
        .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型
        //.decodingOptions(BitmapFactory.Options decodingOptions)//设置图片的解码配置  
        .delayBeforeLoading(0)//int delayInMillis为你设置的下载前的延迟时间
        //设置图片加入缓存前,对bitmap进行设置  
        //.preProcessor(BitmapProcessor preProcessor)  
        .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位  
        .displayer(new RoundedBitmapDisplayer(20))//不推荐用!!!!是否设置为圆角,弧度为多少  
        .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间,可能会出现闪动
        .build();//构建完成
  • 3、ImageLader提供了几个图片加载的方法,一般使用displayImage(),主要是这几个displayImage(), loadImage(),loadImageSync(),loadImageSync()方法是同步的,android4.0有个特性,
    网络操作不能在主线程,所以loadImageSync()方法我们就不去使用。
  • 4、OutOfMemoryError问题
    • 减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
    • 在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
    • 在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
    • 在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
  • 5、支持Uri:2种表述方式
    • Image-Loader框架会根据不同的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/13”; // from content provider
      • String imageUri = “assets://image.png”; // from assets
      • String imageUri = “drawable://” + R.drawable.image; // from drawables (only images, non-9patch)
    • Image-Loader框架会根据不同的Scheme获取到输入流
      • //图片来源于assets
      • String assetsUrl = Scheme.ASSETS.wrap(“image.png”);
      • //图片来源于
      • String drawableUrl = Scheme.DRAWABLE.wrap(“R.drawable.image”);
  • 6、displayImage()加载图片(一般格式)
    • 参数一:String,图片资源
    • 参数二:imageView
    • 参数三:DisplayImageOptions选项
    • 参数四:动画监听器
    • AnimateImageListener animateImageListener = new AnimateImageListener();
    • ImageLoader.getInstance().displayImage(pics[position],holder.iV,options,animateImageListener);
private static class AnimateImageListener extends SimpleImageLoadingListener {

        private static List<String> displayImages = Collections.synchronizedList(new LinkedList<String>());

        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            if (loadedImage != null) {
                ImageView imageView = (ImageView) view;
                boolean firstDisplay = !displayImages.contains(imageUri);
                if (firstDisplay) {
                    FadeInBitmapDisplayer.animate(imageView, 500);
                    displayImages.add(imageUri);
                }
            }

        }
    }
  • 7、GirdView,ListView设置滑动时加载图片
    • listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
    • gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
    • pauseOnScroll为true时,滚动时暂停加载图片
    • pauseOnFling为true时,快速滑动时暂停加载图片
  • 8、我们在加载网络图片的时候,经常有需要显示图片下载进度的需求,Image-Loader当然也提供这样的功能,只需要在displayImage()方法中传入ImageLoadingProgressListener接口就行了
imageLoader.displayImage(imageUrl, mImageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {  

            @Override  
            public void onProgressUpdate(String imageUri, View view, int current,  
                    int total) {  

            }  
        });
  • 9、控制图片加载过程前,中,后,取消等的监听器SimpleImageLoadingListener,可采用缺省模式,需要哪个用哪个
    • onLoadingStarted
    • onLoadingFailed
    • onLoadingComplete
    • onLoadingCancelled
ImageLoader.getInstance().loadImage(imageUrl, new SimpleImageLoadingListener(){  

            @Override  
            public void onLoadingComplete(String imageUri, View view,  
                    Bitmap loadedImage) {  
                super.onLoadingComplete(imageUri, view, loadedImage);  
                mImageView.setImageBitmap(loadedImage);  
            }  

        });  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值