public abstract class BaseImageLoaderProvider {
    public abstract void loadImage(Context ctx, ImageLoader img);
}
public class GlideImageLoaderCorpProvider extends BaseImageLoaderProvider {
    @Override
    public void loadImage(Context ctx, ImageLoader img) {

        int strategy = img.getStrategy();
        if (strategy == ImageLoaderHelp.LOAD_STRATEGY_ONLY_WIFI) {
            String netType = NetworkStateHelp.getNetWorkModel(App.getApplication());
            //如果是在wifi下才加载图片,并且当前网络是wifi,直接加载
            if (NetworkStateHelp.MODE_WIFI.equals(netType)) {
                loadNormal(ctx, img);
            } else {
                //如果是在wifi下才加载图片,并且当前网络不是wifi,加载缓存
                loadCache(ctx, img);
            }
        } else {
            //如果不是在wifi下才加载图片
            loadNormal(ctx, img);
        }

    }

    /**
     * load image with Glide
     */
    private void loadNormal(Context ctx, ImageLoader img) {
        Glide.with(ctx).load(img.getUrl()).placeholder(img.getPlaceHolder()).centerCrop().into(img.getImgView());
    }

    /**
     * load cache image with Glide
     */
    private void loadCache(Context ctx, ImageLoader img) {
        Glide.with(ctx).using(new StreamModelLoader<String>() {
            @Override
            public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
                return new DataFetcher<InputStream>() {
                    @Override
                    public InputStream loadData(Priority priority) throws Exception {
                        throw new IOException();
                    }

                    @Override
                    public void cleanup() {

                    }

                    @Override
                    public String getId() {
                        return model;
                    }

                    @Override
                    public void cancel() {

                    }
                };
            }
        }).load(img.getUrl()).placeholder(img.getPlaceHolder()).diskCacheStrategy(DiskCacheStrategy.ALL).into(img.getImgView());
    }
}
public class GlideImageLoaderProvider extends BaseImageLoaderProvider {
    @Override
    public void loadImage(Context ctx, ImageLoader img) {

        int strategy = img.getStrategy();
        if (strategy == ImageLoaderHelp.LOAD_STRATEGY_ONLY_WIFI) {
            String netType = NetworkStateHelp.getNetWorkModel(App.getApplication());
            //如果是在wifi下才加载图片,并且当前网络是wifi,直接加载
            if (NetworkStateHelp.MODE_WIFI.equals(netType)) {
                loadNormal(ctx, img);
            } else {
                //如果是在wifi下才加载图片,并且当前网络不是wifi,加载缓存
                loadCache(ctx, img);
            }
        } else {
            //如果不是在wifi下才加载图片
            loadNormal(ctx, img);
        }

    }

    /**
     * load image with Glide
     */
    private void loadNormal(Context ctx, ImageLoader img) {
        Glide.with(ctx).load(img.getUrl()).placeholder(img.getPlaceHolder()).into(img.getImgView());
    }

    /**
     * load cache image with Glide
     */
    private void loadCache(Context ctx, ImageLoader img) {
        Glide.with(ctx).using(new StreamModelLoader<String>() {
            @Override
            public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
                return new DataFetcher<InputStream>() {
                    @Override
                    public InputStream loadData(Priority priority) throws Exception {
                        throw new IOException();
                    }

                    @Override
                    public void cleanup() {

                    }

                    @Override
                    public String getId() {
                        return model;
                    }

                    @Override
                    public void cancel() {

                    }
                };
            }
        }).load(img.getUrl()).placeholder(img.getPlaceHolder()).diskCacheStrategy(DiskCacheStrategy.ALL).into(img.getImgView());
    }
}
public class ImageLoader {
    private int type;  //类型 (大图,中图,小图)
    private String url; //需要解析的url
    private int placeHolder; //当没有成功加载的时候显示的图片
    private ImageView imgView; //ImageView的实例
    private int strategy;//加载策略,是否在wifi下才加载

    private ImageLoader(Builder builder) {
        this.type = builder.type;
        this.url = builder.url;
        this.placeHolder = builder.placeHolder;
        this.imgView = builder.imgView;
        this.strategy = builder.strategy;
    }
    public int getType() {
        return type;
    }

    public String getUrl() {
        return url;
    }

    public int getPlaceHolder() {
        return placeHolder;
    }

    public ImageView getImgView() {
        return imgView;
    }

    public int getStrategy() {
        return strategy;
    }

    public static class Builder {
        private int type;
        private String url;
        private int placeHolder;
        private ImageView imgView;
        private int strategy;

        public Builder() {
            this.type = ImageLoaderHelp.PIC_SMALL;
            this.url = "";
            this.placeHolder = R.drawable.icon_fmoren;
            this.imgView = null;
            this.strategy = ImageLoaderHelp.LOAD_STRATEGY_NORMAL;
        }

        public Builder type(int type) {
            this.type = type;
            return this;
        }

        public Builder url(String url) {
            this.url = url;
            return this;
        }

        public Builder placeHolder(int placeHolder) {
            this.placeHolder = placeHolder;
            return this;
        }

        public Builder imgView(ImageView imgView) {
            this.imgView = imgView;
            return this;
        }

        public Builder strategy(int strategy) {
            this.strategy = strategy;
            return this;
        }

        public ImageLoader build() {
            return new ImageLoader(this);
        }

    }
}
/**
 * ImageLoader包装类,对外提供接口使用
 */
public class ImageLoaderHelp {

    public static final int PIC_LARGE = 0;
    public static final int PIC_MEDIUM = 1;
    public static final int PIC_SMALL = 2;

    public static final int LOAD_STRATEGY_NORMAL = 0;
    public static final int LOAD_STRATEGY_ONLY_WIFI = 1;

    private static ImageLoaderHelp mInstance;
    private BaseImageLoaderProvider mProvider;
    private BaseImageLoaderProvider mCorpProvider;

    private ImageLoaderHelp() {
        mProvider = new GlideImageLoaderProvider();
        mCorpProvider = new GlideImageLoaderCorpProvider();
    }

    //single instance
    public static ImageLoaderHelp getInstance() {
        if (mInstance == null) {
            synchronized (ImageLoaderHelp.class) {
                if (mInstance == null) {
                    mInstance = new ImageLoaderHelp();
                    return mInstance;
                }
            }
        }
        return mInstance;
    }

    public void loadImage(Context context, ImageLoader img) {
        mProvider.loadImage(context, img);
    }

    public void loadImage(Context context, String uri, ImageView imageView) {
        ImageLoader imageLoader = new ImageLoader.Builder().url(uri).imgView(imageView).build();
        mProvider.loadImage(context, imageLoader);
    }

    public void loadImageCorp(Context context, String uri, ImageView imageView) {
        ImageLoader imageLoader = new ImageLoader.Builder().url(uri).imgView(imageView).build();
        mCorpProvider.loadImage(context, imageLoader);
    }

    public void loadQuestionHeadPic(Context context, String uri, ImageView imageView) {
        ImageLoader imageLoader = new ImageLoader.Builder().placeHolder(R.drawable.moren_tx_tiwenqu).url(uri).imgView(imageView).build();
        mProvider.loadImage(context, imageLoader);
    }

    public void loadLiveroomHeadPic(Context context, String uri, ImageView imageView) {
        ImageLoader imageLoader = new ImageLoader.Builder().placeHolder(R.drawable.moren_tx_liaotianshi).url(uri).imgView(imageView).build();
        mProvider.loadImage(context, imageLoader);
    }

    public void loadLiveroomPic(Context context, String uri, ImageView imageView) {
        ImageLoader imageLoader = new ImageLoader.Builder().placeHolder(R.drawable.img_shibai).url(uri).imgView(imageView).build();
        mProvider.loadImage(context, imageLoader);
    }

    public void loadTopicInfoGuestHeadPic(Context context, String uri, ImageView imageView) {
        ImageLoader imageLoader = new ImageLoader.Builder().placeHolder(R.drawable.moren_tx_jinruzhibojian).url(uri).imgView(imageView).build();
        mProvider.loadImage(context, imageLoader);
    }

    public void loadTopicInfoBannerPic(Context context, String uri, ImageView imageView) {
        ImageLoader imageLoader = new ImageLoader.Builder().placeHolder(R.drawable.banner_zhibo).url(uri).imgView(imageView).build();
        mCorpProvider.loadImage(context, imageLoader);
    }

}

加载图片调用

 ImageLoader imageLoader = new ImageLoader.Builder().url(myCourseEntity.getImgUrl()).imgView(myCourseViewHolder.myCourseImage).build();
 ImageLoaderHelp.getInstance().loadImage(context,imageLoader);
ImageLoaderHelp.getInstance().loadImage(this,icon,mine_touxiang_update);

【框架】异步加载大量图片--ImageLoader的更多相关文章

  1. UniversalImageLoader(异步加载大量图片)

    UniversalImageLoader是用于加载图片的一个开源项目,UniversalImageLoader是实现异步加载大量图片的源码和例子,包括缓存.硬盘缓存.容错机制等技术.在其项目介绍中是这 ...

  2. 【jar包】图片的异步加载--【 Imageloader】

    Android Imageloader图片异步加载 Imageloader是一个在android平台下简单的下载.显示.缓存空间的图片加载库. 异步下载网络图片并可以在UI线程更新View,使用二级缓 ...

  3. android 异步加载框架 原理完全解析

    一.手写异步加载框架MyAsycnTask(核心原理) 1.我为大家手写了一个异步加载框架,涵盖了异步加载框架核心原理. MyAsycnTask.java import android.os.Hand ...

  4. LruCache为GridView异步加载大量网络图片

    MainActivity如下: import android.os.Bundle; import android.widget.GridView; import android.app.Activit ...

  5. swift 异步加载图片(第三方框架ImageLoader)

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

  6. Android图片异步加载框架Android-Universal-Image-Loader

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android-Universal-Image-Loader是一个图片异步加载,缓存和显示的框架.这个框架已经被很多开发者所使用,是最常用的几个 ...

  7. ImageLoader实现图片异步加载

    ImageLoader是一个广泛使用的图片库,在向网络请求图片时,使用imageView和smartView常会产生outofmemory错误,这时ImageLoader可以起到很大的作用,主要有如下 ...

  8. Android批量图片加载经典系列——使用xutil框架缓存、异步加载网络图片

    一.问题描述 为提高图片加载的效率,需要对图片的采用缓存和异步加载策略,编码相对比较复杂,实际上有一些优秀的框架提供了解决方案,比如近期在git上比较活跃的xutil框架 Xutil框架提供了四大模块 ...

  9. Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...

随机推荐

  1. 使用ssh正向连接、反向连接、做socks代理的方法

     ssh -L 219.143.16.157:58080:172.21.163.32:8080 用户名@localhost -p 10142  在 219.143.16.157机器执行   将ssh隧 ...

  2. HDU 5875 Function -2016 ICPC 大连赛区网络赛

    题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...

  3. ios手势

    iOS 手势操作:拖动.捏合.旋转.点按.长按.轻扫.自定义 大 中 小   1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. i ...

  4. [Android Pro] Android 进程级别 和 oom_adj对应关系

    一 : 前台进程 (Active Process): oom_adj为0. 前台进程包括 : 1 : 活动 正在前台接收用户输入 2:活动.服务与广播接收器正在执行一个onReceive事件的处理函数 ...

  5. limits.h头文件

    CHAR,SHRT,INT ,LLONG加_MAX后缀表示最大,加_MIN后缀表示最小,加U前缀表示无符号 UCHAR_MIN ,UCHAR_MAX sizeof()计算数所用的空间 #include ...

  6. 手工加载DLL

    1.为了能找到dll的函数地址,生成dll时需要将其中的函数声明为C函数(extern "C"): #ifndef __MYDLL_H#define __MYDLL_H #ifde ...

  7. Makefile_:=与=的区别

    1."=" make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整个makefile中最后被指定的值.看例子: x = foo            y ...

  8. JavaScript基础——创建函数

    JavaScript的最重要的一个部分是制作其他代码可以重用的代码.要做到这一点,你可以把代码组织成执行特定任务的函数.函数是结合在一个单一的块中,并给予一个名称的一系列代码语句.然后,你就可以通过引 ...

  9. mysqli的增强功能

    批量执行sql语句 批量执行dml语句 基本语法 $sqls="sql1.sql2.sql3...." mysqli::multi_query($sqls) 案例: $mysqli ...

  10. MyBatis魔法堂:即学即用篇

    一.前言                   本篇内容以理解MyBatis的基本用法和快速在项目中实践为目的,遵循Make it work,better and excellent原则. 技术栈为My ...