【框架】异步加载大量图片--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 ...
随机推荐
- FastReport里面正确调用函数的方法
FastReport里面正确调用函数的方法 错误: [FormatDateTime('yyyy-mm-dd',[frxDBDataset1."日期"])] --------- ...
- VS2012 打开cs文件报未找到与约束错误
一.问题发生 VS2012,更新补丁后的残忍--创建项目未找到与约束匹配的导出 创建项目时无法成功创建,而且提示:未找到与约束ontractNameMicrosoft.VisualStudio.Tex ...
- Effective C++ -----条款42:了解typename的双重意义
声明template参数时,前缀关键字class和typename可互换. 请使用关键字typename标识嵌套从属类型名称:但不得在base class lists(基类列)或member init ...
- LayoutInflater的inflate函数用法详解
LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(Layo ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- cell分割线宽度不满屏处理
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZ ...
- hdu2108(判断凸多边形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2108 题意: 给出一个多边形的所有顶点,判断是不是凸多边形: 思路: 判断凸多边形的方法比较多,如:若 ...
- NYOJ题目75日期计算
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr4AAAInCAIAAADxjM2pAAAgAElEQVR4nO3dPVLjStsG4G8T5CyE2A
- 三、jQuery--jQuery基础--jQuery基础课程--第8章 jQuery 实现Ajax应用
1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为:load(url,[data],[callback]) ...
- 二、JavaScript语言--JS动画--JS动画效果
运动框架实现思路: 1.速度(改变值:left , right , width , height , opacity) 2.缓冲运动 3.多物体运动 4.任意值改变 5.链式运动 6.同时运动 js用 ...