前言:可从 https://github.com/nostra13/Android-Universal-Image-Loader 下载三级缓存机制的开源框架。下文简单介绍该框架中主要的常用方法,掌握这些方法,基本就可应对多数图片下载的需求。
注意:以下代码为示意代码片断,仔细读一下应能知道怎么用。蓝色表示为开源框架中的类。
1.初始化ImageLoader类对象:
ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.stop(); // 停止加载图片 imageLoader.clearMemoryCache(); // 清除内存缓存 imageLoader.clearDiscCache(); // 清除SD卡中的缓存
2.在Adapter的getView( ) 方法中,显示ImageView的图片的imageLoader.displayImage( )方法:
ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); /** * 显示图片 * 参数1:图片url * 参数2:显示图片的控件 * 参数3:显示图片的设置 * 参数4:监听器 */ imageLoader.displayImage(imageUrl, holder.image, options, animateFirstListener); // 将图片显示任务增加到执行池,图片将被显示到ImageView当轮到此ImageView imageLoader.displayImage(imageUrl, imageView, options); // 参数传入匿名内部类 imageLoader.displayImage(imageUrl, imageView, options, new SimpleImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { // 可显示进度条 } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { String message = null; switch (failReason.getType()) { // 获取图片失败类型 case IO_ERROR: // 文件I/O错误 message = "Input/Output error"; break; case DECODING_ERROR: // 解码错误 message = "Image can't be decoded"; break; case NETWORK_DENIED: // 网络延迟 message = "Downloads are denied"; break; case OUT_OF_MEMORY: // 内存不足 message = "Out Of Memory error"; break; case UNKNOWN: // 原因不明 message = "Unknown error"; break; } Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // 不显示圆形进度条 } });
3.上述2.中imageLoader.displayImage( )方法的参数options:
DisplayImageOptions options; // DisplayImageOptions是用于设置图片显示的类 options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_stub) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_empty) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓存在内存中 .cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中 .bitmapConfig(Bitmap.Config.RGB_565) //设置图片的解码类型 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .build(); // 创建配置过得DisplayImageOption对象
4.上述2.中imageLoader.displayImage( )方法的参数animateFirstListener:
/** * 图片加载第一次显示监听器 * @author Administrator * */ private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { static final 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); } } } }
5.该框架主要是以上方法,下面的也可了解下:
listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, true, false)); //一堆图片链接 com.nostra13.example.universalimageloader.Constants.IMAGES; // Intent中传递Extra参数的键 :"com.nostra13.example.universalimageloader.IMAGES"; com.nostra13.example.universalimageloader.Constants.Extra.IMAGES // Intent中传递Extra参数的键 :"com.nostra13.example.universalimageloader.IMAGE_POSITION" com.nostra13.example.universalimageloader.Constants.Extra.IMAGE_POSITION
时间: 2024-12-28 06:07:04