android 加载图片资源,一个Android快速图片加载框架BaseImageLoader

作者AlexFugui,源码BaseImageLoader,这是一个Android快速图片加载框架BaseImageLoader。

说明

支持加载网络图片(String格式url)/本地资源(mipmap和drawable)/网络.9图片/gif加载/自定义样式(圆形/圆角/centerCrop)/dataBinding

v1.1.0起支持读取zip中图片加载至任意View中,无需解压.

更多使用方法和示例代码请下载demo源码查看

github : BaseImageLoader

设计说明

根据BaseImageLoader持有图片View层的context和BaseImageConfig类实现Glide原生的生命周期感知和多样化的自定义配置加载

BaseImageConfig使用建造者模式,使用更灵活更方便,也可自行继承BaseImageConfig减少类名长度和实现自定义功能

主要功能loadImage 动态配置config加载你需求的资源图片

loadImageAs 获取网络url返回的资源,可获取drawable/bitmap/file/gif四种文件格式,可控知否获取资源的同时加载到View上

clear 取消加载或清除内存/储存中的缓存

BaseImageView 与动态config完全相同功能的自定义ImageView,支持xml中自定义属性配置各种加载需求

autoLoadImage 开发者自行指定zip压缩包的路径.并绑定当前View的根布局,配合View的tag字段自动加载zip中符合tag中图片名称的图片

添加依赖

implementation 'com.alex:BaseImageLoader:1.1.0'

使用的依赖库api 'com.github.bumptech.glide:glide:4.11.0'

annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

开发者如需剔除重复依赖自行处理

使用说明

1.添加权限

需要添问网络和内存读写权限

2.项目通用配置

功能配置全部可选,如不配置则:

默认内存缓存大小20mb

默认bitmap池缓存30mb

默认硬盘缓存250mb

默认缓存文件夹名称BaseImageLoaderCache

默认缓存策略为AUTOMATIC,自动模式BaseImageSetting.getInstance()

.setMemoryCacheSize(30)//设置内存缓存大小 单位mb

.setBitmapPoolSize(50)//设置bitmap池缓存大小 单位mb

.setDiskCacheSize(80)//设置储存储存缓存大小 单位mb

.setLogLevel(Log.ERROR)//设置log等级

.setPlaceholder(R.drawable.ic_baseline_adb_24)//设置通用占位图片,全项目生效

.setErrorPic(R.mipmap.ic_launcher)//设置通用加载错误图片,全项目生效

.setCacheFileName("BaseImageLoaderDemo")//设置储存缓存文件夹名称,api基于Glide v4

.setCacheStrategy(CacheStrategy.AUTOMATIC)//设置缓存策略

.setCacheSize(50)//设置自动加载图片缓存数量,默认50

;

3.使用

1.获取BaseImageLoader对象

根据开发者项目设计模式,MVC/MVP/MVVM自行获取BaseImageLoader类对象,并自行管理生命周期.

BaseImageLoader自行提供单例,BaseImageLoader.getInstance();

2.加载至ImageView(包括但不限于任何继承于View或ViewGroup的view)BaseImageLoader mImageLoader = new BaseImageLoader();

mImageLoader.loadImage(this, ImageConfig.builder()

.url(Uri.parse(imageUrl))//url

.imageView(img1)//imageView

.placeholder(R.drawable.ic_baseline_adb_24)//占位图

.errorPic(R.mipmap.ic_launcher)//加载错误图片

.cacheStrategy(CacheStrategy.ALL)//缓存策略

.centerCrop(true)//centerCrop

.crossFade(true)//淡出淡入

.isCircle(true)//是否圆形显示

.setAsBitmap(true)//是否以bitmap加载图片,默认为drawable格式

.setRadius(30)//设置通用圆角,单位dp

.setTopRightRadius(10)//左上圆角,单位dp

.setTopLeftRadius(20)//右上圆角,单位dp

.setBottomRightRadius(30)//左下圆角,单位dp

.setBottomLeftRadius(40)//右下圆角,单位dp

.show());

注意:

避免过度绘制和二次绘制,其中优先级

isCircle(true) > setRadius(int) > setTopRightRadius(int) = setTopLeftRadius(int) = setBottomRightRadius(int) = setBottomLeftRadius(int)设置isCircle(true)会使通用圆角设置不生效,减少绘制次数

设置setRadius()会使分别控制单独圆角不生效,减少绘制次数

3.资源文件直出

方法一:/**

* 加载图片同时获取不同格式的资源

* @param context {@link Context}

* @param url 资源url或资源文件

* @param listener 获取的资源回调结果

*/

void loadImageAs(@NonNull Context context, @NonNull Object url, @NonNull L listener);

/**

* 根据图片类型直出对象

* 需要根据参数类型判断获取的字段,比如使用OnBitmapResult,就只有getBitmap方法不为null

* 根据是否传入imageView是否直接显示图片,如果想自己处理过资源再加载则不传入imageView

*

*/

mImageLoader.loadImageAs(this, imageUrlTest, new OnBitmapResult() {

@Override

public void OnResult(ImageResult result) {

Log.e("result", result.getBitmap() + "");

}

});

方法二:/**

*

* @param context {@link Context}

* @param url 资源url或资源文件

* @param imageView 显示的imageView

* @param listener 获取的资源回调结果

*/

void loadImageAs(@NonNull Context context, @NonNull Object url, @Nullable ImageView imageView, @NonNull L listener);

/**

* 加载图片且获得bitmap格式图片 且以 imageView.setImageBitmap(bitmap) 模式加载图片

*/

mImageLoader.loadImageAs(this, imageUrlTest, img14, new OnBitmapResult() {

@Override

public void OnResult(ImageResult result) {

Log.e("result", result.getBitmap() + "");

}

});

/**

* 使用File类型获取result时,默认result.getFile()是在设置的cache目录中

* 加载图片且获得File文件 但是以Glide默认方式加载图片(drawable格式) imageView.setImageDrawable(drawable);

*/

mImageLoader.loadImageAs(this, imageUrlTest, img14, new OnFileResult() {

@Override

public void OnResult(ImageResult result) {

Log.e("result", result.getFile() + "");

}

});

/**

* 加载gif且获得gif文件 以 imageView.setImageDrawable(GifDrawable); 模式加载图片

*/

mImageLoader.loadImageAs(this, gifUrl, img14, new OnGifResult() {

@Override

public void OnResult(ImageResult result) {

Log.e("result", result.getGif() + "");

}

});

/**

* 加载图片且获得drawable格式图片 以Glide默认方式加载图片(drawable格式) imageView.setImageDrawable(drawable);

*/

mImageLoader.loadImageAs(this, imageUrlTest, img14, new OnDrawableResult() {

@Override

public void OnResult(ImageResult result) {

Log.e("result", result.getDrawable() + "");

}

});

4.自定义BaseImageView

xml中:

api与代码设置相同

支持DataBinding:

详见demo中dataBinding简单使用 优先级规则同上

4.自动加载图片String ZIP_FILE_PATH = me.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath() + File.separator + "imgs.zip";

//ZIP_FILE_PATH真实路径为:/storage/emulated/0/Android/data/me.alex.baseimageloaderdemo/files/Documents/imgs.zip

ScrollView autoLoadViewGroup = findViewById(R.id.autoLoadViewGroup);

BaseImageLoader.getInstance().autoLoadImage(this, autoLoadViewGroup, ZIP_FILE_PATH);

xml中zip文件夹位置开发者自行设置,demo中是将assets中的imgs.zip复制至指定路径然后加载.

配合xml中View对象的tag参数匹配zip中的文件名称.

如使用BaseImageView+tag加载图片,支持自定义属性

Demo中加载6张图片耗时60ms左右

本功能开发本意是减少apk体积 , 减少重复资源下载 , 开发者可在业务流程中自行处理zip文件的下载和存放位置 , 自行处理数据安全

参数说明

1.BaseImageSetting:函数名入参类型参数说明setMemoryCacheSize()int设置内存缓存大小 单位mb

setBitmapPoolSize()int设置bitmap池缓存大小 单位mb

setDiskCacheSize()int设置储存储存缓存大小 单位mb

setLogLevel()int设置框架日志打印等级,详看android.util.Log类与Glide v4文档

placeholder()intv1.0.0版本仅支持resource类型int参数

errorPic()intv1.0.0版本仅支持resource类型int参数

setCacheFileName()String设置储存缓存文件夹名称,api基于Glide v4

2.BaseImageLoader:/**

* 加载图片 使用继承自BaseImageConfig的配置

*

* @param context {@link Context}

* @param config  {@link BaseImageConfig}  图片加载配置信息

*/

void loadImage(@NonNull Context context, @NonNull T config);/**

* 自动加载图片

* @param context {@link Context}

* @param viewGroup xml中的根标签View

* @param zipFileRealPath zip文件夹路径

*/

void autoLoadImage(@NonNull Context context, @NonNull ViewGroup viewGroup, @NonNull String zipFileRealPath);/**

* 加载图片同时获取不同格式的资源

* @param context {@link Context}

* @param url 资源url或资源文件

* @param listener 获取的资源回调结果

*/

void loadImageAs(@NonNull Context context, @NonNull Object url, @NonNull L listener);/**

*

* @param context {@link Context}

* @param url 资源url或资源文件

* @param imageView 显示的imageView

* @param listener 获取的资源回调结果

*/

void loadImageAs(@NonNull Context context, @NonNull Object url, @Nullable ImageView imageView, @NonNull L listener);/**

* 停止加载 或 清除缓存

*

* @param context {@link Context}

* @param config  {@link BaseImageConfig}  图片加载配置信息

*/

void clear(@NonNull Context context, @NonNull T config);

3.BaseImageConfig:函数名入参类型类型参数说明builder()无BaseImageConfig使用建造者模式,BaseImageConfig默认空构造方法

url() (代码使用)Object支持原生Glide中所有类型 *1

url() (xml中)Object支持原生Glide中所有类型,且支持resource类型

imageView()View支持任何继承与View和ViewGroup的View *2

placeholder()intv1.0.0版本仅支持resource类型int参数

errorPic()intv1.0.0版本仅支持resource类型int参数

cacheStrategy()int设置缓存策略,详看CacheStrategy类与Glide v4文档

setRadius()int设置通用圆角 单位dp

setTopRightRadius()int设置左上圆角 单位dp

setTopLeftRadius()int设置右上圆角 单位dp

setBottomRightRadius()int设置左下圆角 单位dp

setBottomLeftRadius()int设置右下圆角 单位dp

centerCrop()Booleantrue为居中裁剪

crossFade()Booleantrue为开启淡出淡入

isCircle()Booleantrue为开启圆形裁剪

setAsBitmap()Booleantrue为以bitmap格式加载图片

clearMemory()Booleantrue为清除内存中缓存,仅在BaseImageLoader.clear()中生效

clearDiskCache()Booleantrue为清除储存中缓存,仅在BaseImageLoader.clear()中生效

show()无BaseImageConfig使用建造者模式,用于new BaseImageConfig对象

1.支持的urlModel类型 : Bitmap/Drawable/String/Uri/File/Integer resourceId/URL/byte[]/Object2.ImageView的子类使用Glide默认的 setImageDrawable() 方式实现; 其他继承VIew或ViewGroup的以setBackground() 方式实现

360a84c2a35c54efeda84b9b1479350f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值