Android-Universal-Image-Loader开源项目的简要说明及使用实例
本文转载于:http://www.cnblogs.com/hsx514/p/3460179.html
一.核心类的说明及相关参数的说明
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:图片不会调整

二.简要使用的示例
MyApplication

package com.ryantang.rtimageloader; import android.app.Application; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
/**
* 初始化ImageLoaderConfiguration
*
* @author hsx
* @time 2013-12-5下午05:38:43
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate(); // This configuration tuning is custom. You can tune every option, you may tune some of them,
// or you can create default configuration by
// ImageLoaderConfiguration.createDefault(this);
// method.
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.threadPriority(Thread.NORM_PRIORITY - 2)//设置线程的优先级
.denyCacheImageMultipleSizesInMemory()//当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片
.discCacheFileNameGenerator(new Md5FileNameGenerator())//设置缓存文件的名字
.discCacheFileCount(60)//缓存文件的最大个数
.tasksProcessingOrder(QueueProcessingType.LIFO)// 设置图片下载和显示的工作队列排序
.enableLogging() //是否打印日志用于检查错误
.build(); //Initialize ImageLoader with configuration
ImageLoader.getInstance().init(config);
}
}

AnimateFirstDisplayListener

package com.ryantang.rtimageloader.listener; import java.util.Collections;
import java.util.LinkedList;
import java.util.List; import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView; import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; public class AnimateFirstDisplayListener extends SimpleImageLoadingListener { public static List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>()); @Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 500);
displayedImages.add(imageUri);
}
}
}
}

ItemAdapter

package com.ryantang.rtimageloader.adapter; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.ryantang.rtimageloader.R;
import com.ryantang.rtimageloader.listener.AnimateFirstDisplayListener; public class ItemAdapter extends BaseAdapter {
DisplayImageOptions options; private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); String[] imageUrls;
Context context; public ItemAdapter(String[] imageUrls, Context context) {
super();
this.imageUrls = imageUrls;
this.context = context;
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_launcher)//设置图片在下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_launcher)//设置图片加载/解码过程中错误时候显示的图片
.cacheInMemory(true)//是否緩存都內存中
.cacheOnDisc(true)//是否緩存到sd卡上
.displayer(new RoundedBitmapDisplayer(20))
.build();
} private class ViewHolder {
public TextView text;
public ImageView image;
} @Override
public int getCount() {
return imageUrls.length;
} @Override
public Object getItem(int position) {
return position;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_list_image, parent, false);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.image = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
} holder.text.setText("Item " + (position + 1));
// ImageLoader
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener); return convertView;
}
}

Android-Universal-Image-Loader开源项目的简要说明及使用实例的更多相关文章
- android universal image loader 缓冲原理详解
1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的.可高度定制的图片缓存,本文简称为UIL ...
- Android二维码开源项目zxing用例简化和生成二维码、条形码
上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的測试程序:CaptureActivity比較复杂,我仅仅要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自 ...
- Android Hawk数据库 github开源项目
Android Hawk数据库 github开源项目 Hawk 是一个很便捷的数据库 . 操作数据库仅仅需一行代码 , 能存不论什么数据类型 . github 地址: https://github. ...
- Android中Universal Image Loader开源框架的简单使用
UIL (Universal Image Loader)aims to provide a powerful, flexible and highly customizable instrument ...
- Android笔记——导入Github开源项目CircleRefreshLayout
百度n久都找不到android studio导入第三方类库的正确方法,纠结睡不着 ,最后终于蒙到了方法,原来想太多了 ---------------------------------------- ...
- Android开发UI之开源项目第一篇——个性化控件(View)篇
原文:http://blog.csdn.net/java886o/article/details/24355907 本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍A ...
- Android非常实用的开源项目框架
我将文章中所描述的项目都集成在一个apk中,可以直接运行查看效果,2.2以上的机器都可以运行.因为不让直接上传apk文件,我压缩成了zip包 1. Universal-Image-Loader 实现异 ...
- android最火的开源项目
原文地址:http://www.csdn.net/article/2013-05-21/2815370-Android-open-source-projects-finale 此前,CSDN移动频道推 ...
- 推荐内置android控件的开源项目alcinoe
开源地址:https://github.com/Zeus64/alcinoe 该控件包,含以下几个控件: 1.基于OpenGL实现的视频播放器 ALVideoPlayer. ALVideoPlayer ...
随机推荐
- app store 上架流程
前言:作为一名IOS开发者,把开发出来的App上传到App Store是必须的.下面就来详细介绍下具体流程. 1.打开苹果开发者中心:https://developer.apple.com 打开后点击 ...
- Swift 实现下拉刷新 JxbRefresh
JxbRefresh 是采用Swift 实现的 iOS 下拉刷新. 正常下拉刷新: 1 2 3 4 5 self.taleView.addPullRefresh({ [weak self] in ...
- 分享Windows Server 2012 R2的获取正版密钥方法
然后使用“我有ISIC卡”验证,目前可用号码:S420546009858. 分享Windows Server 2012 R2的获取正版密钥方法. 首先登陆dreamspark注册一个账号https:/ ...
- ASP.NET是如何在IIS下工作的[转]
ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化. IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6 ...
- table td的宽度详解
前言:一直总觉得td的宽度好难驾驭,但万事万物总是有规律的.就像亮剑说的:不用因为怕八路就敬而远之,应该靠上去,熟悉他们,了解他们. 正文: Table只有Table的宽度是可 ...
- iOS APP提交上架最新流程
时隔1年又让我鼓捣iOS,刚接手就是上架,经验值为0的我,虽然内心是拒绝的,但还是要接受这项任务滴!也就是在被拒后重新审核,再改在提交...这样反复的过程中也对上架流程熟悉了好多,写篇帖子 ...
- phpunit+selenium环境搭建
这个环境搭建遇到了挺多麻烦,最终还是没能自己解决,幸好有同事“青蛙”的帮忙解决了这个问题!在这里把本人亲测步骤给大家列一下,希望给大家提供方便! 安装pear: Go-pear.phar下载地址:ht ...
- .NET项目框架(转)
摘要:本文描述了在用VS.NET进行B/S开发时采用的框架结构,一般建立类库项目和Web项目,在Web基本aspx页面类中调用类库中方法,同时在aspx页面类中不需要写任何对数据库操作的SQL代码,便 ...
- html释疑
解析<button>和<input type="button"> 的区别(转) 一.定义和用法 <button> 标签定义的是一个按钮. 在 b ...
- FATE_完全背包
ps:原来用新浪,可是代码的排版不是很好,所以用博客园啦,先容许我把从八月份开始的代码搬过来,从这里重新出发,希望这里可以一直见证我的成长. Time Limit: 2000/1000 MS (Jav ...