Contents
  1. 1. 2015-09-18 11:15:00
    1. 1.1. ImageLoader作用
  2. 2. 2015-09-18 14:31:16
    1. 2.1. ImageLoader加载的类型
  3. 3. 2015-09-18 11:14:55
    1. 3.1. ImageLoader的加载、显示配置:
      1. 3.1.1. 加载Image时的配置(ImageLoaderConfiguration)
  4. 4. 2015-09-18 11:49:23
    1. 4.0.1. 显示Image时的配置(DisplayImageOptions)
  • 5. 2015-09-18 18:34:22
    1. 5.1. 加载图片的方法
  • 6. 2015/11/23 16:13:06
    1. 6.1. OOM问题
  • 7. 2015-09-18 14:42:49
    1. 7.1. ImageView ScaleType
  • 2015-09-18 11:15:00

    ImageLoader作用

    1. 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中
    2. 支持图片的内存缓存,文件系统缓存或者SD卡缓存
    3. 支持图片下载过程的监听
    4. 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
    • 支持库

      'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
      
    • 权限

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

    2015-09-18 14:31:16

    ImageLoader加载的类型

    • http://site.com/image.png“ // from Web
    • “file:///mnt/sdcard/image.png” // from SD card
    • “file:///mnt/sdcard/video.mp4” // from SD card (video thumbnail)
    • “content://media/external/images/media/13” // from content provider
    • “content://media/external/video/media/13” // from content provider (video thumbnail)
    • “assets://image.png” // from assets
    • “drawable://“ + R.drawable.img // from drawables (non-9patch images)[用imageView.setImageResource(drawable)来代替]

    2015-09-18 11:14:55

    ImageLoader的加载、显示配置:

    加载Image时的配置(ImageLoaderConfiguration)

    • (默认配置)通过ImageLoaderConfiguration 的createDefault进行实例化
    • (自定义配置)通过new ImageLoaderConfiguration.Builder().builder()方法进行实例化。

    通常配置如下:

    File diskCache = StorageUtils.getOwnCacheDirectory(context, "BNJ_IMAGE_CACHE/");  
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
            .diskCache(new UnlimitedDiscCache(diskCache)) // 设置缓存路径
            .memoryCacheSize(2 * 1024) // 设置缓存的最大字节
            .diskCacheFileNameGenerator(new Md5FileNameGenerator())  // 加密
            .denyCacheImageMultipleSizesInMemory() // 禁止缓存显示不同大小的同一张图片
            .memoryCacheExtraOptions(800, 760) // 保存每个缓存图片的最大长和宽
            .diskCacheFileCount(100) //缓存的File数量 
            .build();
    

    使用:

    通过ImageLoader的getInstance().init()方法传入上述options对象.

    2015-09-18 11:49:23

    显示Image时的配置(DisplayImageOptions)

    • (自定义配置)通过new DisplayImageOptions.Builder().builder()方法实例化对象

    通常配置如下:

     DisplayImageOptions options = new DisplayImageOptions.Builder()  
                .showImageOnLoading(R.drawable.ic_stub) // 设置加载时的图片 (使用loadImage方法加载时无效)
                .showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable  
                .showImageOnFail(R.drawable.ic_error) // 设置加载失败的图片
                .cacheInMemory(true) //设置使用内存缓存 
                .cacheOnDisk(true)  //使用文件缓存
                .displayer(new RoundedBitmapDisplayer(20))  // 设置成圆角图片   
                .bitmapConfig(Bitmap.Config.RGB_565)  //减少内存消耗
                .delayBeforeLoading(100) //设置下载图片前的延时
                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) 
                .build();  
    
    ImageSize size= new ImageSize(300,300);(大小可以通过创建ImageSize对象设置)
    
    上述图片显示displayer  
    

    显示圆角 RoundedBitmapDisplayer (Displays bitmap with rounded corners)
    淡入显示 FadeInBitmapDisplayer (Displays image with “fade in” animation)

    2015-09-18 18:34:22

    加载图片的方法

    loadImage跟displayImage
    A.ImageLoader.getInstance().loadImage(uri地址,图片大小,上述配置,监听器,进度监听器);
    B.ImageLoader.getinstance().displayImage(uri地址,控件,上述配置,监听器,进度监听器);
    区别:
    A方法可以设置图片大小,即自定义下载图片的大小
    B方法会根据控件大小及ImageScaleType来裁剪图片

    监听器有两种:
    SimpleImageLoadingListener(简单的监听器)
    ImageLoadingListener (该监听器能实现 加载图片取消时,失败时的方法)
    ImageLoadingProgressListener
    5.最后在监听器的onLoadingComplete方法里,设置图片显示即可

    进阶
    listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
    第一个参数是imageLoader,第二个参数是滑动时是否加载图片,第三个参数是猛的滑动时是否加载图片

    2015/11/23 16:13:06

    OOM问题

    如果使用了ImageLoader出现OutOfMemoryError的话,那么可以通过下列方法解决
    关闭memory的cache。

    • 减少线程池的大小

    • 用Bitmap.Config.RGB565代替ARGB8888

    • 使用.imageScaleType(ImageScaleType.EXACTLY 或ImageScaleType.IN_SAMPLE_INT)

    • 使用.diskCacheExtraOption(480, 320, null)

    2015-09-18 14:42:49

    ImageView ScaleType

    Contents
    1. 1. 2015-09-18 11:15:00
      1. 1.1. ImageLoader作用
    2. 2. 2015-09-18 14:31:16
      1. 2.1. ImageLoader加载的类型
    3. 3. 2015-09-18 11:14:55
      1. 3.1. ImageLoader的加载、显示配置:
        1. 3.1.1. 加载Image时的配置(ImageLoaderConfiguration)
    4. 4. 2015-09-18 11:49:23
      1. 4.0.1. 显示Image时的配置(DisplayImageOptions)
  • 5. 2015-09-18 18:34:22
    1. 5.1. 加载图片的方法
  • 6. 2015/11/23 16:13:06
    1. 6.1. OOM问题
  • 7. 2015-09-18 14:42:49
    1. 7.1. ImageView ScaleType