我们在开发APP的时候都需要用到图片加载框架,在网上也同样能搜到一大片的图片加载框架,当我们使用这些框架的时候,难免也会用到网络 加载数据框架,这就导致我们会使用两个或多个线程池,这样就会影响我们APP的性能,也不易进行线程管理所以为了项目的可管理性,我们可以 自己写一个图片加载框架和网络请求框架,便于项目中线程的管理(资料参考来源:《Android设计模式》、鸿洋大神的ImageLoader)。
ImageLoader
介绍:
支持加载网络和本地图片,加载网络图片使用了双缓存机制和libjpeg类库对图片进行处理,压缩比率可自由设置,加载本地图片使用了内存缓存机制,基本满足日常使用。基本用法:
1.缓存:
- ImageCache mCache=new MemeryCache();
- ImageCache mCache=new MemeryCache();
- ImageCache mCache=new MemeryCache();
2.实例化ImageLoader
- ImageLoader imageLoader=ImageLoader.getInstance(mCache,true);//true:是否通过网络加载
3.加载图片
- imageLoader.load(“path”,targetView);
4.添加回调
imageLoader.callBack(new CallBack() {
@Override
public void start() {
}
@Override
public void loading() {
}
@Override
public void success() {
}
@Override
public void error(int code) {
}
});
5.链式调用
ImageLoader.getInstance(new DoubleCache("fileName",60),false).load("path", (ImageView)
holder.setView(R.id.iv_item_gallery_rv)).callBack(new CallBack() {
@Override
public void start() {
}
@Override
public void loading() {
}
@Override
public void success() {
}
@Override
public void error(int code) {
//code:responseCode
}
});
额外福利:
libjpeg的使用:
导入imageLoader Library库中的so库和android-jpeg.jar
压缩bitmap: File file=new File("sdcard/"+cacheDir,MD5Utils.getMd5(path));
/**将图片处理后保存到本地
*第一个参数是获取到的bitmap对象,
*第二个参数是压缩比率
*第三个参数是保存图片的路径
*第四个参数是是否采用哈夫曼算法
*(jpeg的核心算法,即谷歌在使用skia引擎的时候所阉割的,也是苹果处理图片和安卓处理图片的区别所在)
*/
NativeUtil.compressBitmap(bitmap,PERCENT,file.getAbsolutePath(),true);