博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用UIL(Universal-Image-Loader)异步加载图片
阅读量:6639 次
发布时间:2019-06-25

本文共 4808 字,大约阅读时间需要 16 分钟。

概要 Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是实现可重复使用的异步图像加载、缓存和显示。所以,如果你的程序里需要这个功能的话,使用它,因为已经封装好了一些类和方法。其实,写一个这方面的程序还是比较麻烦的,要考虑多线程,缓存,内存溢出等很多方面。
     功能介绍: 

         A:多线程图片加载;

         B:灵活更改ImageLoader的基本配置,包括最大线程数、缓存方式、图片显示选项等;
         C:图片异步加载缓存机制,包括内存缓存(软引用)及本地缓存;
         D:对加载过程实现监听和事件处理; 

         E:能够配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等;

使用步骤:

1、下载jar包universal-image-loader-x.x.x-with-sources.jar并导入工程

2、配置Manifest文件,添加网络请求和访问外部存储的权限,因为要进行网络请求和本地缓存

3,实现自定义的MyApplication类,并初始化ImageLoader,注意要在Manifest的Application标签注明

android:name=".MyApplication",否则还是使用的默认的Application类。

 

  

package com.wjt.day36_01_uillistview;import java.io.File;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;import android.app.Application;import android.content.Context;import android.graphics.Bitmap.CompressFormat;public class UILApplication extends Application{	@Override	public void onCreate() {		super.onCreate();		initImageLoader(getApplicationContext());	}	private void initImageLoader(Context context) {		File cacheDir = context.getExternalCacheDir();		ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(				getApplicationContext())				.memoryCacheExtraOptions(480, 800)				// max width, max height,即保存的每个缓存文件的最大长宽				.discCacheExtraOptions(480, 800, CompressFormat.PNG, 100, null)				// 设置缓存的详细信息,最好不要设置这个				.threadPoolSize(5)				// 线程池内加载的数量				.threadPriority(Thread.NORM_PRIORITY - 2)				.denyCacheImageMultipleSizesInMemory()				.memoryCache(new UsingFreqLimitedMemoryCache(4 * 1024 * 1024))				// 你可以通过自己的内存缓存实现				.memoryCacheSize(4 * 1024 * 1024)				.discCacheSize(50 * 1024 * 1024)				.discCacheFileNameGenerator(new HashCodeFileNameGenerator())				// 将保存的时候的URI名称用MD5 加密				.tasksProcessingOrder(QueueProcessingType.LIFO)				.discCacheFileCount(100)				// 缓存的文件数量				.discCache(new UnlimitedDiscCache(cacheDir))				// 自定义缓存路径				.defaultDisplayImageOptions(DisplayImageOptions.createSimple())				.imageDownloader(						new BaseImageDownloader(context, 5 * 1000, 30 * 1000))				.build();// 开始构建		ImageLoader.getInstance().init(configuration);	}}

 4,配置图片显示选项——DisplayImageOptions 的设置(我这里以listview为例,并创建自定义的适配器) 

//部分代码public class MyGridViewAdapter extends BaseAdapter {	private String[] arrUrls = null;	private LayoutInflater inflater = null;	private DisplayImageOptions options = null;	private ImageLoader imageLoader = null;	public MyGridViewAdapter(Context context, String[] arrUrls) {		this.arrUrls = arrUrls;		inflater = (LayoutInflater) context				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);		options = new DisplayImageOptions.Builder()				.showImageOnLoading(R.drawable.ic_stub)				.showImageForEmptyUri(R.drawable.ic_empty)				.showImageOnFail(R.drawable.ic_error).cacheInMemory(true)				.cacheOnDisc(true).considerExifParams(true)				.displayer(new FadeInBitmapDisplayer(500))				.displayer(new RoundedBitmapDisplayer(90)).build();		imageLoader = ImageLoader.getInstance();	}

 重要的几个方法如下:

5,在要产生图片的地方使用displayImage()方法,一般选择三个参数或者四个参数的

public View getView(int position, View convertView, ViewGroup parent) {		final ViewHolder mHolder;		if (convertView == null) {			mHolder = new ViewHolder();			convertView = inflater.inflate(R.layout.item_gridview_uil, parent,					false);			mHolder.imageView_item_icon = (ImageView) convertView					.findViewById(R.id.imageView_item_icon);			mHolder.progrssBar_item = (ProgressBar) convertView					.findViewById(R.id.progressBar_item);			convertView.setTag(mHolder);		} else {			mHolder = (ViewHolder) convertView.getTag();		}		// 使用UIL框架加载图片		imageLoader.displayImage(arrUrls[position],				mHolder.imageView_item_icon, options,				new ImageLoadingListener() {					@Override					public void onLoadingStarted(String imageUri, View view) {						mHolder.progrssBar_item.setVisibility(View.VISIBLE);					}					@Override					public void onLoadingFailed(String imageUri, View view,							FailReason failReason) {						mHolder.progrssBar_item.setVisibility(View.GONE);					}					@Override					public void onLoadingComplete(String imageUri, View view,							Bitmap loadedImage) {						mHolder.progrssBar_item.setVisibility(View.GONE);					}					@Override					public void onLoadingCancelled(String imageUri, View view) {						// TODO Auto-generated method stub					}				});		return convertView;	}

  效果图如下:

 

 

  

 

 

转载地址:http://yeivo.baihongyu.com/

你可能感兴趣的文章
linux下如何制作ext4文件系统镜像
查看>>
GPIO_Mode
查看>>
iOS总结一
查看>>
SimpleDateFormat使用详解
查看>>
如何获取DedeCms相关文章的代码
查看>>
采访~
查看>>
我对接口测试的理解
查看>>
软件工程师能力自我评价
查看>>
Ubuntu下go语言开发环境搭建(GoEclipse配置)
查看>>
获取CPU系列号,硬盘系
查看>>
【Spark 深入学习 02】- 我是一个凶残的spark
查看>>
1.4 配置备份策略(Policy)
查看>>
STL - 常用顺序容器代码
查看>>
黑马程序员—10-宏定义、枚举、typedef
查看>>
[转] 驱动模拟键盘鼠标
查看>>
Makefile 常用函数表
查看>>
狐狸和兔子
查看>>
世界卫生组织十大垃圾食物
查看>>
启示录-打造用户喜爱的产品 读书笔记
查看>>
NoSQL-redis-单机多实例,伪分布式环境搭建
查看>>