ImageLoader 手写框架

926 阅读2分钟
我们在开发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);
            
最后宣传下自己的博客中使用libjpeg的方法:

blog.csdn.net/qq_16070781…
源代码: 欢迎大家去我的github多start