`

Android-Universal-Image-Loader

 
阅读更多

本文引自:  https://github.com/nostra13/Android-Universal-Image-Loader

                 http://www.cnblogs.com/hsx514/p/3460179.html

                 http://www.cnblogs.com/tianzhijiexian/p/4034304.html

 

Android-Universal-Image-Loader是Android里面一个比较好用的图片异步下载器,支持的URL也比较多如:

"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)

 

Simple

// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view 
//  which implements ImageAware interface)
imageLoader.displayImage(imageUri, imageView);
// Load image, decode it to Bitmap and return Bitmap to callback
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});
// Load image, decode it to Bitmap and return Bitmap synchronously
Bitmap bmp = imageLoader.loadImageSync(imageUri);

Complete

// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view 
//  which implements ImageAware interface)
imageLoader.displayImage(imageUri, imageView, options, 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) {
        ...
    }
    @Override
    public void onLoadingCancelled(String imageUri, View view) {
        ...
    }
}, new ImageLoadingProgressListener() {
    @Override
    public void onProgressUpdate(String imageUri, View view, int current, int total) {
        ...
    }
});
// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});
// Load image, decode it to Bitmap and return Bitmap synchronously
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);

相关设置:

ImageLoaderConfiguration设置

1.作用:为ImageLoader提供下载配置(全局设置)

2.构造方法:

复制代码
/**
  * ImageLoaderConfiguration 创建的两种方式。
  */
    // 创建默认的ImageLoaderConfiguration
    ImageLoaderConfiguration configuration_0 = ImageLoaderConfiguration
			.createDefault(this);

    // 使用DisplayImageOptions.Builder()创建DisplayImageOptions
    ImageLoaderConfiguration configuration_1 = new ImageLoaderConfiguration.Builder(
            this).threadPriority(Thread.NORM_PRIORITY - 2)
            .denyCacheImageMultipleSizesInMemory()
            .discCacheFileNameGenerator(new Md5FileNameGenerator())
            .tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging()
            .build();
复制代码

3.常用方法设置说明:

 

/**
 *当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片
 */
 denyCacheImageMultipleSizesInMemory()
/**
  * 设置本地图片缓存
  * @param discCache
  */
  discCache(DiscCacheAware discCache) 
  系统提示的:DiscCacheAware 类型说明(在com.nostra13.universalimageloader.cache.disc.impl包下能找到如下的类):
        FileCountLimitedDiscCache(File cacheDir, int maxFileCount):设置缓存路径和缓存文件的数量,超过数量后,old将被删除
        FileCountLimitedDiscCache(File cacheDir,FileNameGenerator fileNameGenerator,int maxFileCount):第二个参数是通过图片的url生成的唯一文件名。
        LimitedAgeDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, long maxAge) :第二个参数同上
        LimitedAgeDiscCache(File cacheDir, long maxAge):maxAge为定义的时间,超过时间后,图片将被删除
        TotalSizeLimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, int maxCacheSize) :第二个参数同上   
        TotalSizeLimitedDiscCache(File cacheDir, int maxCacheSize) :定义缓存的大小,如超过了,就会删除old图片。
        UnlimitedDiscCache(File cacheDir) :缓存没有限制
        UnlimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator):第二个参数同上  
    
              
/**
     * 设置图片保存到本地的参数
     * @param maxImageWidthForDiscCache 保存的最大宽度
     * @param maxImageHeightForDiscCache 保存的最大高度
     * @param compressFormat    保存的压缩格式
     * @param compressQuality 提示压缩的程度,有0-100.想png这种图片无损耗,就不必设置了
     */
    discCacheExtraOptions(int maxImageWidthForDiscCache,
            int maxImageHeightForDiscCache,
            android.graphics.Bitmap.CompressFormat compressFormat,
            int compressQuality)
/**
    * 设置缓存文件的数量
    * @param maxFileCount 数量
    */
    discCacheFileCount(int maxFileCount)
/**
       * 设置缓存的大小
       * @param maxCacheSize 大小
      */
        discCacheSize(int maxCacheSize)
/**
     * 设置缓存文件的名字
     * @param fileNameGenerator
     */
    discCacheFileNameGenerator(FileNameGenerator fileNameGenerator)
             fileNameGenerator:
                      HashCodeFileNameGenerator() :通过HashCode将url生成文件的唯一名字
                      Md5FileNameGenerator():通过Md5将url生产文件的唯一名字
/**
  * 启动Log信息记录,用于查看异常信息
  */
    enableLogging()
/**
     * 设置缓存信息
     * @param maxImageWidthForMemoryCache 缓存图片的最大宽度,默认为手机的屏幕宽度
     * @param maxImageHeightForMemoryCache 缓存图片的最大高度,默认为手机的屏幕宽度
     */
    memoryCacheExtraOptions(int maxImageWidthForMemoryCache, int maxImageHeightForMemoryCache)
/**
     * 添加个线程池,进行下载
     * @param executor 线程池
     * 如果进行了这个设置,那么threadPoolSize(int),threadPriority(int),tasksProcessingOrder(QueueProcessingType)
     * 将不会起作用
     */
     taskExecutor(Executor executor)
/**
       * 设置用于显示图片的线程池大小
      * @param threadPoolSize
       */
      threadPoolSize(int threadPoolSize)
/**
      * 设置线程的优先级
      * @param threadPriority
       */
      threadPriority(int threadPriority)
/**
      * 设置图片下载和显示的工作队列排序
       * @param tasksProcessingType
       */
      tasksProcessingOrder(QueueProcessingType tasksProcessingType)
/**
      * 下载缓存图片
    * @param executorForCachedImages
    */
     taskExecutorForCachedImages(Executor executorForCachedImages)

 

DisplayImageOptions设置

1.作用:用于设置图片显示的类。

2.构造方法:

/**
         * DisplayImageOptions 创建的两种方式。
         */
        // 创建默认的DisplayImageOptions
        DisplayImageOptions option_0 = DisplayImageOptions.createSimple();

        // 使用DisplayImageOptions.Builder()创建DisplayImageOptions
        DisplayImageOptions option_1 = new DisplayImageOptions.Builder()
                .showStubImage(R.drawable.ic_launcher)
                .showImageOnFail(R.drawable.ic_error)
                .showImageForEmptyUri(R.drawable.ic_empty).cacheInMemory()
                .cacheOnDisc().displayer(new RoundedBitmapDisplayer(20))
                .build();

3.常用方法:

    //设置图片在下载期间显示的图片
    showStubImage(R.drawable.ic_launcher)
    
    //设置图片Uri为空或是错误的时候显示的图片
    showImageForEmptyUri(R.drawable.ic_empty)
    
    //设置图片加载/解码过程中错误时候显示的图片
    showImageOnFail(R.drawable.ic_error)
    
    //设置图片在下载前是否重置,复位
    resetViewBeforeLoading()
    
    //设置下载的图片是否缓存在内存中
    cacheInMemory()
    
    //设置下载的图片是否缓存在SD卡中
    cacheOnDisc()
    
    //设置图片的解码类型
    bitmapConfig(Bitmap.Config.RGB_565)
    
    //设置图片的解码配置
    decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)
    
    //设置图片下载前的延迟
    delayBeforeLoading(int delayInMillis) 
    
    //设置额外的内容给ImageDownloader
    extraForDownloader(Object extra)
    
    //设置图片加入缓存前,对bitmap进行设置
    preProcessor(BitmapProcessor preProcessor)
    
    //设置显示前的图片,显示后这个图片一直保留在缓存中
    postProcessor(BitmapProcessor postProcessor) 
    
    //设置图片以如何的编码方式显示
    imageScaleType(ImageScaleType imageScaleType)
/**
     * 设置图片的显示方式
     * @param displayer 
     */
    displayer(BitmapDisplayer displayer)
        displayer:
              RoundedBitmapDisplayer(int roundPixels)设置圆角图片
              FakeBitmapDisplayer()这个类什么都没做
              FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
       SimpleBitmapDisplayer()正常显示一张图片
/**
 * 图片的缩放方式
 * @param imageScaleType
 */
    imageScaleType(ImageScaleType imageScaleType)
         imageScaleType:
                 EXACTLY :图像将完全按比例缩小的目标大小
                   EXACTLY_STRETCHED:图片会缩放到目标大小完全
                   IN_SAMPLE_INT:图像将被二次采样的整数倍
                   IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
                   NONE:图片不会调整

 

几点说明:

1).imageScaleType(ImageScaleType imageScaleType)  //设置图片的缩放方式,如:

.imageScaleType(ImageScaleType.IN_SAMPLE_INT)

其中,mageScaleType的选择值:
              EXACTLY :图像将完全按比例缩小的目标大小
              EXACTLY_STRETCHED:图片会缩放到目标大小完全
              IN_SAMPLE_INT:图像将被二次采样的整数倍
              IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
              NONE:图片不会调整

2).displayer(BitmapDisplayer displayer)  // 设置图片的显示方式,如:

.displayer(new FadeInBitmapDisplayer(100))

其中,displayer的选择值:

     RoundedBitmapDisplayer(int roundPixels)设置圆角图片,不推荐!!!
              FakeBitmapDisplayer()这个类什么都没做
              FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
     SimpleBitmapDisplayer()正常显示一张图片

 

3.避免OOM

.bitmapConfig(Bitmap.Config.RGB_565) //默认是ARGB_8888,使用RGB_565会比使用ARGB_8888少消耗2倍的内

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

避免使用.displayer(new RoundedBitmapDisplayer(20)) //他会创建新的ARGB_8888格式的Bitmap对象;

 

示例:

在Application中设置

 

File cacheDir = StorageUtils.getOwnCacheDirectory(
				getApplicationContext(), "loan/ImgCache");
		LogManager.d(cacheDir.getPath());

		DisplayImageOptions options = new DisplayImageOptions.Builder()
				.cacheInMemory(true).cacheOnDisk(true).build();

		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				getApplicationContext())
				// .memoryCacheExtraOptions(200, 175)
				// .discCacheExtraOptions(0, 0, CompressFormat.PNG, 70)
				// .d
				.memoryCacheSize(1024 * 1024 * 10)
				// Can slow ImageLoader, use it carefully (Better don't use it)
				.threadPoolSize(5).threadPriority(Thread.MIN_PRIORITY + 2)
				.denyCacheImageMultipleSizesInMemory()
				.diskCache(new LimitedAgeDiscCache(cacheDir, 60 * 60 * 24 * 7))
				.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
				.defaultDisplayImageOptions(options).build();
		ImageLoader.getInstance().init(config);
 在Activity中注体使用情况
DisplayImageOptions.Builder options = new DisplayImageOptions.Builder();
		options.cacheOnDisk(true);
		options.imageScaleType(ImageScaleType.IN_SAMPLE_INT);
		options.bitmapConfig(Bitmap.Config.RGB_565);

		ImageLoader.getInstance().displayImage(url
				img_id_photo, options.build(), new ImageLoadingListener() {

					@Override
					public void onLoadingStarted(String arg0, View arg1) {
						showProgressDialog("正在加载中...");
					}

					@Override
					public void onLoadingFailed(String arg0, View arg1,
							FailReason arg2) {
						dismissProgressDialog();
						showToast("加载失败");
					}

					@Override
					public void onLoadingComplete(String arg0, View arg1,
							Bitmap arg2) {
						dismissProgressDialog();
					}

					@Override
					public void onLoadingCancelled(String arg0, View arg1) {
						dismissProgressDialog();
						showToast("取消加载");
					}
				});

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics