赞
踩
Android-Universal-Image-Loader是 一个开源的UI组件程序,该项目的目的是提供一个可重复使用的利器。为异步图像加载,缓存和显示。所以,如果你的程序里需要这个功能的话,那么不妨试试它。 因为已经封装好了一些类和方法。我们 可以直接拿来用了。而不用重复去写了。其实,写一个这方面的程序还是比较麻烦的,要考虑多线程缓存,内存溢出等很多方面。
下载地址:
https://github.com/nostra13/Android-Universal-Image-Loader
ImageLoaderConfiguration:
是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。
DisplayImageOptions:
用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。
ImageLoader:
是具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(...)、loadImage(...),但是其实最终他们的实现都是displayImage(...)。
//图片缓存的全局配置,要有线程类、缓存大小、图片下载与解析、日志方面的配置
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
//内存缓存图片的最大宽高
builder.memoryCacheExtraOptions(480,800);
//线程池数
builder.threadPoolSize(3);
//线程优先级
builder.threadPriority(Thread.NORM_PRIORTY+1);
/**
* 设置在内存中缓存图像的多种尺寸
* 加载同一URL图片时,imageView从小变大时,从内存中加载
* 不建议使用
*/
builder.denyCacheImageMultipleSizesInMemory();
//超过设定的缓存大小时,磁盘缓存的清除机制
File cacheDir = new File("/mnt/sdcard/cache/");
builder.diskCache(new UnlimitedDiskCache(cacheDir));
//磁盘缓存的文件命名方式,一般使用默认值(获取文件名称的hashcode然后转换成字符串)
bulider.diskCacheFileNameFenerator(new HashCodeFileNameGenerator());
//MD5-new Md5FileNameGenerator()源文件的名称同过md5加密后保存
builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());
builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());
//最大缓存大小。默认值应用程序可用内存的1/8.
builder.memoryCacheSize(100);
//开启ImageLoader工作日志
builder.writeDebugLogs();
//图片处理器,负责从磁盘缓存读取或写入前对图片进行处理
builder.diskCacheExtraOptions(480,800,null);
//获取ImageLoaderConfiguration对象
ImageLoaderConfiguration configuration = builder.build();
//创建ImageLoader实例
ImageLoader imageloader = ImageLoader.getInstance();
imageloader.init(configuration);
DisplayImageOptions.Builder optionsBuilder = new DisplayImageOptions.Builder();
//设置图片在下载期间显示的图片
optionsBuilder.showImageOnLoading(R.drawable.ic_launcher);
//设置图片Uri为空或是错误的时候显示的图片
optionsBuilder.showImageForEmptyUri(R.drawable.ic_launcher);
//设置图片加载/解码过程中失败时候显示的图片
optionsBuilder.showImageOnFail(R.drawable.ic_launcher);
//设置图片是否缓存到内存中
optionsBuilder.cacheInMemory(true);
//设置下载的图片是否缓存在SD卡中
optionsBuilder.cacheOnDisk(ture);
//是否考虑JPEG图像EXIF参数(旋转,翻转)
optionsBuilder.considderExifParams(true);
//设置图片以如何的编码方式显示
optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);
optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);
ImageScaleType.EXACTLY:图像将完全按比例缩小的目标大小
ImageScaleType.EXACTLY_STRETCHED:图片会缩放到目标大小完全
ImageScaleType.IN_SAMPLE_INT:图像将被二次采样的整数倍
ImageScaleType.IN_SAMPLE_POWER_OF_2:
图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
ImageScaleType .NONE:图片不会调整//设置图片的解码类型/默认是ARGB_8888,使用RGB_565会比ARGB_8888少消耗2倍内存
optionsBuilder. bitmapConfig(Bitmap.Config.RGB_565);
//为你设置下载前的延迟时间
optionsBuilder.delayBeforeLoading(0);
//设置图片在下载前是否重置,复位
optionsBuilder.resetViewBeforeLoading(true);
/**
* 不推荐用!!!是否设置为圆角,弧度为多少 * 他会创建新的ARGB_8888格式的Bitmap对象
*/
//设置为圆角
optionsBuilder.displayer(new RoundedBitmapDisplayer(20));
//设置为方角
//构建完成
DisplayImageOptions options = optionsBuilder.build();
退出程序时清理
//清除磁盘缓存
ImageLoader.getInstance().clearDiskCache();
//清除内存缓存
ImageLoader.getInstance().clearMemoryCache();
请求方法为:
ImageLoader支持的Url
// from Web
http://site.com/image.png
// from SD card
file:///mnt/sdcard/image.png
// from SD card(video thumbnail)
file:///mnt/sdcard/video.mp4
// from content provider
content://media/external/images/media/13
// from content provider (video thumbnail)
content://media/external/video/media/13
// from assets
assets://image.png
// from drawables (non-9patch images)
drawable://" +R.drawable.img
ImageLoader的简单使用方法
//创建实例
ImageLoaderimageLoader =ImageLoader.getInstance();
//加载并显示图片
方法一:
imageLoader.displayImage(imageUri,imageView);
方法二:回调方式
imageLoader.loadImage(imageUri, newSimpleImageLoadingListener() {
@Override
public void onLoadingComplete(StringimageUri,Viewview,BitmaploadedImage)
{
// Dowhatever you want with Bitmap
}
});
方法三:同步的方式获取图片
Bitmap bmp = imageLoader.loadImageSync(imageUri);
方法一:
方法二:
方法三:
使用ImageLoader时,需要配置如下权限:
<!-- Include following permission if you load imagesfrom Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Include following permission if you want tocache images on SD card -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在这里特别要注意的是在Application或者第一个Activity进行初始化
在此附上代码如下:
public class MainActivity extends Activity {
private GridView gv;
private ImageLoader instance;
private ImageLoaderConfiguration configuration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
// 创建配置信息
instance = ImageLoader.getInstance();
// 加载配置信息
instance.init(configuration);
// 加载配置
// instance.init(ImageLoaderConfiguration.createDefault(this));
gv.setAdapter(new MyAdapter(instance, this));
}
private void init() {
gv = (GridView) findViewById(R.id.gv);
// 图片缓存的全局配置(在网上加载)
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
// 内存缓存图片的最大宽度
builder.memoryCacheExtraOptions(480, 800);
// 线程池
builder.threadPoolSize(3);
// 线程优先级
builder.threadPriority(Thread.NORM_PRIORITY + 1);
// 设置硬盘的图片的最大高度
builder.diskCacheExtraOptions(480, 800, null);
// 超过设定的缓存大小时,内存缓存清除机制
builder.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024));
// 超过设定的缓存大小时,磁盘缓存的清除机制
File file = new File(Environment.getExternalStorageDirectory().getParent() + "/cache");
builder.diskCache(new UnlimitedDiskCache(file));
// 给文件命名,一般使用默认值(使用md5加密)
builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());
builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());
DisplayImageOptions.Builder optionBuilder = new DisplayImageOptions.Builder();
// 设置图片URI为空或是错误的时候显示的图片
optionBuilder.showImageForEmptyUri(R.drawable.ic_launcher);
// 设置图片在下载期间显示的图片
optionBuilder.showImageOnLoading(R.drawable.ic_launcher);
// 设置图片加载/解码过程中失败时候显示的图片
optionBuilder.showImageOnFail(R.drawable.ic_launcher);
// 设置下载的图片是否缓存在内存中
optionBuilder.cacheInMemory(true);
// 设置下载的图片是否缓存在SD卡中
optionBuilder.cacheOnDisk(true);
// 设置图片的圆弧
optionBuilder.displayer(new RoundedBitmapDisplayer(25));
// 将optionBuilder放到DisplayImageOptions中
DisplayImageOptions options = optionBuilder.build();
// 将DisplayImageOptions加载到configuration的builder容器中
builder.defaultDisplayImageOptions(options);
// 创造出配置类
configuration = builder.build();
}
@Override
protected void onDestroy() {
if (instance != null) {
instance.clearDiskCache();
instance.clearMemoryCache();
}
}
}
public class MyAdapter extends BaseAdapter {
private ImageLoader imageloader;
private Context context;
//str为URL地址
private String[] str;
public MyAdapter(ImageLoader imageloader, Context context) {
super();
this.imageloader = imageloader;
this.context = context;
str = ImageAddress.imageThumbUrls;
}
public int getCount() {
return str != null ? str.length : 0;
}
public Object getItem(int position) {
return str[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
holder ho;
if (convertView == null) {
convertView = View.inflate(context, R.layout.gvitem, null);
ho = new holder();
ho.iv = (ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(ho);
}else{
ho = (holder) convertView.getTag();
}
imageloader.displayImage(str[position], ho.iv);
return convertView;
}
static class holder {
ImageView iv;
}
}
//设置圆形图片
ImageLoader instance = ImageLoader.getInstance();
instance.init(ImageLoaderConfiguration.createDefault(this));
DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new CircleBitmapDisplayer()).build();
instance.displayImage(“图片地址”, “控件”, options);
Android-Universal-Image-Loader是 一个开源的UI组件程序,该项目的目的是提供一个可重复使用的利器。为异步图像加载,缓存和显示。所以,如果你的程序里需要这个功能的话,那么不妨试试它。 因为已经封装好了一些类和方法。我们 可以直接拿来用了。而不用重复去写了。其实,写一个这方面的程序还是比较麻烦的,要考虑多线程缓存,内存溢出等很多方面。
下载地址:
https://github.com/nostra13/Android-Universal-Image-Loader
ImageLoaderConfiguration:
是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。
DisplayImageOptions:
用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。
ImageLoader:
是具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(...)、loadImage(...),但是其实最终他们的实现都是displayImage(...)。
//图片缓存的全局配置,要有线程类、缓存大小、图片下载与解析、日志方面的配置
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
//内存缓存图片的最大宽高
builder.memoryCacheExtraOptions(480,800);
//线程池数
builder.threadPoolSize(3);
//线程优先级
builder.threadPriority(Thread.NORM_PRIORTY+1);
/**
* 设置在内存中缓存图像的多种尺寸
* 加载同一URL图片时,imageView从小变大时,从内存中加载
* 不建议使用
*/
builder.denyCacheImageMultipleSizesInMemory();
//超过设定的缓存大小时,磁盘缓存的清除机制
File cacheDir = new File("/mnt/sdcard/cache/");
builder.diskCache(new UnlimitedDiskCache(cacheDir));
//磁盘缓存的文件命名方式,一般使用默认值(获取文件名称的hashcode然后转换成字符串)
bulider.diskCacheFileNameFenerator(new HashCodeFileNameGenerator());
//MD5-new Md5FileNameGenerator()源文件的名称同过md5加密后保存
builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());
builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());
//最大缓存大小。默认值应用程序可用内存的1/8.
builder.memoryCacheSize(100);
//开启ImageLoader工作日志
builder.writeDebugLogs();
//图片处理器,负责从磁盘缓存读取或写入前对图片进行处理
builder.diskCacheExtraOptions(480,800,null);
//获取ImageLoaderConfiguration对象
ImageLoaderConfiguration configuration = builder.build();
//创建ImageLoader实例
ImageLoader imageloader = ImageLoader.getInstance();
imageloader.init(configuration);
DisplayImageOptions.Builder optionsBuilder = new DisplayImageOptions.Builder();
//设置图片在下载期间显示的图片
optionsBuilder.showImageOnLoading(R.drawable.ic_launcher);
//设置图片Uri为空或是错误的时候显示的图片
optionsBuilder.showImageForEmptyUri(R.drawable.ic_launcher);
//设置图片加载/解码过程中失败时候显示的图片
optionsBuilder.showImageOnFail(R.drawable.ic_launcher);
//设置图片是否缓存到内存中
optionsBuilder.cacheInMemory(true);
//设置下载的图片是否缓存在SD卡中
optionsBuilder.cacheOnDisk(ture);
//是否考虑JPEG图像EXIF参数(旋转,翻转)
optionsBuilder.considderExifParams(true);
//设置图片以如何的编码方式显示
optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);
optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);
ImageScaleType.EXACTLY:图像将完全按比例缩小的目标大小
ImageScaleType.EXACTLY_STRETCHED:图片会缩放到目标大小完全
ImageScaleType.IN_SAMPLE_INT:图像将被二次采样的整数倍
ImageScaleType.IN_SAMPLE_POWER_OF_2:
图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
ImageScaleType .NONE:图片不会调整//设置图片的解码类型/默认是ARGB_8888,使用RGB_565会比ARGB_8888少消耗2倍内存
optionsBuilder. bitmapConfig(Bitmap.Config.RGB_565);
//为你设置下载前的延迟时间
optionsBuilder.delayBeforeLoading(0);
//设置图片在下载前是否重置,复位
optionsBuilder.resetViewBeforeLoading(true);
/**
* 不推荐用!!!是否设置为圆角,弧度为多少 * 他会创建新的ARGB_8888格式的Bitmap对象
*/
//设置为圆角
optionsBuilder.displayer(new RoundedBitmapDisplayer(20));
//设置为方角
//构建完成
DisplayImageOptions options = optionsBuilder.build();
退出程序时清理
//清除磁盘缓存
ImageLoader.getInstance().clearDiskCache();
//清除内存缓存
ImageLoader.getInstance().clearMemoryCache();
请求方法为:
ImageLoader支持的Url
// from Web
http://site.com/image.png
// from SD card
file:///mnt/sdcard/image.png
// from SD card(video thumbnail)
file:///mnt/sdcard/video.mp4
// from content provider
content://media/external/images/media/13
// from content provider (video thumbnail)
content://media/external/video/media/13
// from assets
assets://image.png
// from drawables (non-9patch images)
drawable://" +R.drawable.img
ImageLoader的简单使用方法
//创建实例
ImageLoaderimageLoader =ImageLoader.getInstance();
//加载并显示图片
方法一:
imageLoader.displayImage(imageUri,imageView);
方法二:回调方式
imageLoader.loadImage(imageUri, newSimpleImageLoadingListener() {
@Override
public void onLoadingComplete(StringimageUri,Viewview,BitmaploadedImage)
{
// Dowhatever you want with Bitmap
}
});
方法三:同步的方式获取图片
Bitmap bmp = imageLoader.loadImageSync(imageUri);
方法一:
方法二:
方法三:
使用ImageLoader时,需要配置如下权限:
<!-- Include following permission if you load imagesfrom Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Include following permission if you want tocache images on SD card -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在这里特别要注意的是在Application或者第一个Activity进行初始化
在此附上代码如下:
public class MainActivity extends Activity {
private GridView gv;
private ImageLoader instance;
private ImageLoaderConfiguration configuration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
// 创建配置信息
instance = ImageLoader.getInstance();
// 加载配置信息
instance.init(configuration);
// 加载配置
// instance.init(ImageLoaderConfiguration.createDefault(this));
gv.setAdapter(new MyAdapter(instance, this));
}
private void init() {
gv = (GridView) findViewById(R.id.gv);
// 图片缓存的全局配置(在网上加载)
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
// 内存缓存图片的最大宽度
builder.memoryCacheExtraOptions(480, 800);
// 线程池
builder.threadPoolSize(3);
// 线程优先级
builder.threadPriority(Thread.NORM_PRIORITY + 1);
// 设置硬盘的图片的最大高度
builder.diskCacheExtraOptions(480, 800, null);
// 超过设定的缓存大小时,内存缓存清除机制
builder.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024));
// 超过设定的缓存大小时,磁盘缓存的清除机制
File file = new File(Environment.getExternalStorageDirectory().getParent() + "/cache");
builder.diskCache(new UnlimitedDiskCache(file));
// 给文件命名,一般使用默认值(使用md5加密)
builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());
builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());
DisplayImageOptions.Builder optionBuilder = new DisplayImageOptions.Builder();
// 设置图片URI为空或是错误的时候显示的图片
optionBuilder.showImageForEmptyUri(R.drawable.ic_launcher);
// 设置图片在下载期间显示的图片
optionBuilder.showImageOnLoading(R.drawable.ic_launcher);
// 设置图片加载/解码过程中失败时候显示的图片
optionBuilder.showImageOnFail(R.drawable.ic_launcher);
// 设置下载的图片是否缓存在内存中
optionBuilder.cacheInMemory(true);
// 设置下载的图片是否缓存在SD卡中
optionBuilder.cacheOnDisk(true);
// 设置图片的圆弧
optionBuilder.displayer(new RoundedBitmapDisplayer(25));
// 将optionBuilder放到DisplayImageOptions中
DisplayImageOptions options = optionBuilder.build();
// 将DisplayImageOptions加载到configuration的builder容器中
builder.defaultDisplayImageOptions(options);
// 创造出配置类
configuration = builder.build();
}
@Override
protected void onDestroy() {
if (instance != null) {
instance.clearDiskCache();
instance.clearMemoryCache();
}
}
}
public class MyAdapter extends BaseAdapter {
private ImageLoader imageloader;
private Context context;
//str为URL地址
private String[] str;
public MyAdapter(ImageLoader imageloader, Context context) {
super();
this.imageloader = imageloader;
this.context = context;
str = ImageAddress.imageThumbUrls;
}
public int getCount() {
return str != null ? str.length : 0;
}
public Object getItem(int position) {
return str[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
holder ho;
if (convertView == null) {
convertView = View.inflate(context, R.layout.gvitem, null);
ho = new holder();
ho.iv = (ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(ho);
}else{
ho = (holder) convertView.getTag();
}
imageloader.displayImage(str[position], ho.iv);
return convertView;
}
static class holder {
ImageView iv;
}
}
//设置圆形图片
ImageLoader instance = ImageLoader.getInstance();
instance.init(ImageLoaderConfiguration.createDefault(this));
DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new CircleBitmapDisplayer()).build();
instance.displayImage(“图片地址”, “控件”, options);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。