UniversalImageLoader源码解读03-一些无关紧要的小类
来源:互联网 发布:阿里云wdcp控制面板 编辑:程序博客网 时间:2024/05/05 12:14
在继续向下解读源码之前,我想介绍一下一些无关紧要的小类,这些类对于理解源码的主干帮助并不大,但是,了解这些类做到心中有数,对于源码的阅读速度是至关重要的。笔者就是通过阅读这些无关紧要的小类开始,逐步深入到主干。
1,一些listener ,在com.nostra13.universalimageloader.core.listener包下, 主要的作用是监听图片的加载,以及控制图片的加载
如果你使用的还算熟练,那么下面的接口你一定熟悉:
public interface ImageLoadingListener {void onLoadingStarted(String imageUri, View view);void onLoadingFailed(String imageUri, View view, FailReason failReason);void onLoadingComplete(String imageUri, View view, Bitmap loadedImage);void onLoadingCancelled(String imageUri, View view);}
如果你是高级一点的使用者,那么下面的类你也一定熟悉,这是框架给我们的福利, 用来优化滑动过程中图片的加载, 不想解释,先简单看注释
public class PauseOnScrollListener implements OnScrollListener {private ImageLoader imageLoader;private final boolean pauseOnScroll;private final boolean pauseOnFling;private final OnScrollListener externalListener;public PauseOnScrollListener(ImageLoader imageLoader, boolean pauseOnScroll, boolean pauseOnFling) {this(imageLoader, pauseOnScroll, pauseOnFling, null);}public PauseOnScrollListener(ImageLoader imageLoader, boolean pauseOnScroll, boolean pauseOnFling,OnScrollListener customListener) {this.imageLoader = imageLoader;this.pauseOnScroll = pauseOnScroll;this.pauseOnFling = pauseOnFling;externalListener = customListener;}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch (scrollState) {case OnScrollListener.SCROLL_STATE_IDLE:// 滑动停止后,开始加载图片imageLoader.resume();break;case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 触摸滑动过程中,停止加载图片if (pauseOnScroll) {imageLoader.pause();}break;case OnScrollListener.SCROLL_STATE_FLING:if (pauseOnFling) {imageLoader.pause();// fling 滑动过程中,停止加载图片}break;}if (externalListener != null) {externalListener.onScrollStateChanged(view, scrollState);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {if (externalListener != null) {externalListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);}}}
而框架提供的SimpleImageLoadingListener 什么也没干,只是空实现
在com.nostra13.universalimageloader.core.assist下提供了一些辅助小类,一个一个解释
ContentLengthInputStream 内部保存了一个流字节长度,作为输入流的一个代理存在,在BaseImageDownloader里使用, 源码中貌似没有使用这个length
FailReason描述了加载图片失败的原因,这个原因一旦框架加载图片出了问题就会通过ImageLoadingListener传给你,只要你注册这个监听器
FlushedInputStream 处理慢速网络下加载图片的问题,标准方法,深入原因本人未深究,框架会为你处理慢速网络下的加载,读者耐心读完这个系列就会有所了解
ImageScaleType 图片的缩放类型,枚举,代码中英文注释已经很详细了,在此不做过多解释。
ImageSize 保存图片的宽高,并提供缩放等处理操作
LoadedFrom 图片来源类型
QueueProcessingType 这个在这里先说一下,加载图片的操作会被框架包装成一个任务放到一个队列里,会有一个处理的线程来处理,处理线程取任务的方式由这个类定义,有FIFO, LIFO两种方式
ViewScaleType 前面已经说过了
在com.nostra13.universalimageloader.cache.disc.naming 下提供了两个生成图片imageKey的方法,用作磁盘缓存的key
同样,来自于一个接口
public interface FileNameGenerator {/** Generates unique file name for image defined by URI */String generate(String imageUri);}
Md5FileNameGenerator 会根据imageUri算出一个MD5值 HashCodeFileNameGenerator 仅仅根据imageUri的hashCode字符串作为key,笔者推荐前者。
当你读到这里时,如果你拿着鼠标翻看在eclipse里翻看源码的话,并且细细品读,我想你应该能感觉到举例核心已经不远了。如果读者没有用鼠标跟踪源码,那么效果可能会打折扣
- UniversalImageLoader源码解读03-一些无关紧要的小类
- 一些无关紧要的好奇
- UniversalImageLoader源码解读01-用来显示图片的ImageAware
- UniversalImageLoader源码解读04-内存缓存
- UniversalImageLoader源码解读05-磁盘缓存
- UniversalImageLoader源码解读06-任务调度
- UniversalImageLoader源码解读02-图片处理和显示
- UniversalImageLoader源码解读07-内存泄漏和bug
- 下载Android源码时过滤掉无关紧要的大文件
- 无关紧要的生活
- 无关紧要的句子
- UniversalImageLoader 源码笔记(1)
- Caffe源码解读(二):Blob类的源码解读
- Caffe源码解读(三):Layer类的源码解读
- C# (二)无关紧要的
- 批处理删除无关紧要的文件
- 写一点无关紧要的东西
- 黑马程序员 初学IO的一些小知识解读
- 一键安装LNMP或LAMP
- JAVA Class 类探究
- 将Mac下的openssl更新到最新版本
- hdoj String 5672 (字符串模拟)求至少有k个不重复的字符的子串个数
- Java小知识点总结
- UniversalImageLoader源码解读03-一些无关紧要的小类
- java学习笔记数组
- Android常用控件及其属性
- wdf dma 常见错误
- 基于HTK的连续语音识别系统搭建学习笔记(三)
- Jquery 通过切换按钮中图标的类来控制出现不同的按钮图标
- mysql workbench 从模型导出表结构
- APNs的文档
- demo源码