【框架】异步加载大量图片--ImageLoader
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的更多相关文章
- UniversalImageLoader(异步加载大量图片)
UniversalImageLoader是用于加载图片的一个开源项目,UniversalImageLoader是实现异步加载大量图片的源码和例子,包括缓存.硬盘缓存.容错机制等技术.在其项目介绍中是这 ...
- 【jar包】图片的异步加载--【 Imageloader】
Android Imageloader图片异步加载 Imageloader是一个在android平台下简单的下载.显示.缓存空间的图片加载库. 异步下载网络图片并可以在UI线程更新View,使用二级缓 ...
- android 异步加载框架 原理完全解析
一.手写异步加载框架MyAsycnTask(核心原理) 1.我为大家手写了一个异步加载框架,涵盖了异步加载框架核心原理. MyAsycnTask.java import android.os.Hand ...
- LruCache为GridView异步加载大量网络图片
MainActivity如下: import android.os.Bundle; import android.widget.GridView; import android.app.Activit ...
- swift 异步加载图片(第三方框架ImageLoader)
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- Android图片异步加载框架Android-Universal-Image-Loader
版权声明:本文为博主原创文章,未经博主允许不得转载. Android-Universal-Image-Loader是一个图片异步加载,缓存和显示的框架.这个框架已经被很多开发者所使用,是最常用的几个 ...
- ImageLoader实现图片异步加载
ImageLoader是一个广泛使用的图片库,在向网络请求图片时,使用imageView和smartView常会产生outofmemory错误,这时ImageLoader可以起到很大的作用,主要有如下 ...
- Android批量图片加载经典系列——使用xutil框架缓存、异步加载网络图片
一.问题描述 为提高图片加载的效率,需要对图片的采用缓存和异步加载策略,编码相对比较复杂,实际上有一些优秀的框架提供了解决方案,比如近期在git上比较活跃的xutil框架 Xutil框架提供了四大模块 ...
- Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...
随机推荐
- Qt 常用的功能
1.程序重启 void Widget::reStart() { qApp->closeAllWindows(); QProcess::startDetached(qApp->appli ...
- Divide and conquer:Sumsets(POJ 2549)
数集 题目大意:给定一些数的集合,要你求出集合中满足a+b+c=d的最大的d(每个数只能用一次) 这题有两种解法, 第一种就是对分,把a+b的和先求出来,然后再枚举d-c,枚举的时候输入按照降序搜索就 ...
- sql server 导出表结构
今天准备整理下手里面几个数据库,形成一个表结构文档,方便以后维护使用. 网上找到一个脚本还不错,小小的修改就满足了我的要求,执行完SQL脚本. 在结果就能看到数据库所有表的结构,这个时候只要全选,然后 ...
- 自定义View和ViewGroup
为了扫除学习中的盲点,尽可能多的覆盖Android知识的边边角角,决定对自定义View做一个稍微全面一点的使用方法总结,在内容上面并没有什么独特的地方,其他大神们的博客上面基本上都有讲这方面的内容,如 ...
- JavaScript for循环里边异步操作问题。
问题:(DRIVING.search是异步操作) for循环中做异步操作会导致aDistances数组里边的数据全部都是从A_SHOP_INFO数组中最后一条数据获取的值. var iIdx = 0; ...
- noip2016复习
明天的复习任务 矩阵乘法 优先队列(老忘记怎么打) 二分图 K短路 单调队列(还是不太明白各种顺序) 扩展欧几里得 费马小定理求素数 哎呀,列了这么多,任重而道远啊-- 今夕是何夕,晚风过花庭-- 故 ...
- 模拟赛1102d1
炮(cannon)[题目描述]众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮显然不能在一起打起来,于是rly一天借来了 ...
- NYOJ之水仙花数
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsAAAAInCAIAAAAZDHiCAAAgAElEQVR4nO3dPVLjzNoG4G8T5CyEFC
- 20145206邹京儒《Java程序设计》第7周学习总结
20145206 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1.1 时间的度量 ·即使标注为GMT(格林威治时间),实际上谈到的的是UTC(Unix ...
- jq 轮播图
<style> #focus{width:500px;height:200px;overflow:hidden;/*用一个div把图片包含设置超出范围隐藏*/} </style> ...