当前位置:网站首页>glide工具类的简单封装
glide工具类的简单封装
2022-08-09 12:04:00 【谢栋_】
开题:其实对于图片请求框架,我一直推崇掌握并且熟练使用一个就好,早在很久之前我就对Universal-image-loader写过技术分享博客,鉴于它比较成熟,使用起来也比较稳定,所以在做项目时一般会首选Universal-image-loader,但是对于它如果不在整个项目中不做好规划封装,很容易造成代码冗余,正好最近在写新项目,所以打算尝试下另外几款比较有名的图片加载框架,做了一番对比之后,决定使用Glid。
本篇博客开头会简单介绍下Glide的简单使用,我会通过几个简单使用Glide的场景来向大家介绍Glide,然后会为大家总结一些Glide常用的方法,在博客的最后我会贴上我在项目中封装的工具类给大家参考。关于Glide的优缺点对比,我就不在此赘述了,网上比比皆是,写此篇博客的目的是为了跟大家一块把这个好用的图片请求框架再进行一次封装,更加方便大家开发使用。
一、Glide使用场景分析
1.使用Glide最基本的加载图片方法
/**
* 简单获取图片
*
* @param path
* @param view
*/
public static void getImage(String path, ImageView view) {
Glide.with(context)
.load(path)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(view);
}
2.加载图片时指定被加载图片的大小
/**
* 根据指定大小加载图片
*
* @param path
* @param width
* @param height
* @param imageView
*/
public static void getImageBySize(String path, int width, int height, ImageView imageView) {
Glide.with(context)
.load(path)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.override(width, height)
.into(imageView);
}
3.设置加载图片时的animmation动画
/**
* 设置加载图片时的动画
*
* @param path
* @param imageView
* @param anim
*/
public static void getImageWithAnim(String path, ImageView imageView, int anim) {
Glide.with(context)
.load(path)
.animate(anim)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.into(imageView);
}
4.甚至是激动人心的加载Gif,都是简单的几行代码来完成,你会发现原来glide加载图片是如此的优雅
/**
* 加载动态Gif
*
* @param path
* @param imageView
*/
public static void getImageByDynamicGif(String path, ImageView imageView) {
Glide.with(context)
.load(path)
.asGif()
.centerCrop()
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(imageView);
}
5.其他图片请求框架有的功能Glide毫不逊色,使用Glide设置加载图片时的监听器
/**
* 带监听器加载图片
*
* @param path
* @param imageView
* @param requstlistener
*/
public static void getImageWithListener(String path, ImageView imageView, RequestListener<String, GlideDrawable> requstlistener) {
Glide.with(context)
.load(path)
.centerCrop()
.listener(requstlistener)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(imageView);
}
为大家简单梳理几个常见的使用场景,更多方法签名我会在文章最后贴上我基于此封装的GlideUtil工具类供大家参考。
二、关于Glide的常用方法
1.thumbnail(float sizeMultiplier). 请求给定系数的缩略图。如果缩略图比全尺寸图先加载完,就显示缩
略图,否则就不显示。系数sizeMultiplier必须在(0,1)之间,可以递归调用该方法。
2.sizeMultiplier(float sizeMultiplier). 在加载资源之前给Target大小设置系数。
3.diskCacheStrategy(DiskCacheStrategy strategy).设置缓存策略。DiskCacheStrategy.SOURCE:缓存
原始数据,DiskCacheStrategy.RESULT:缓存变换(如缩放、裁剪等)后的资源数据,
DiskCacheStrategy.NONE:什么都不缓存,DiskCacheStrategy.ALL:缓存SOURC和RESULT。
默认采用DiskCacheStrategy.RESULT策略,对于download only操作要使用DiskCacheStrategy.SOURCE。
4.priority(Priority priority). 指定加载的优先级,优先级越高越优先加载,但不保证所有图片
都按序加载。枚举Priority.IMMEDIATE,Priority.HIGH,
Priority.NORMAL,Priority.LOW。默认为Priority.NORMAL。
5.dontAnimate(). 移除所有的动画。
6.animate(int animationId). 在异步加载资源完成时会执行该动画。
7.animate(ViewPropertyAnimation.Animator animator). 在异步加载资源完成时会执行该动画。
8.placeholder(int resourceId). 设置资源加载过程中的占位Drawable。
9.placeholder(Drawable drawable). 设置资源加载过程中的占位Drawable。
10.fallback(int resourceId). 设置model为空时要显示的Drawable。如果没设置fallback,
model为空时将显示error的Drawable,如果error的Drawable也没设置,
就显示placeholder的Drawable。
11.fallback(Drawable drawable).设置model为空时显示的Drawable。
12.error(int resourceId).设置load失败时显示的Drawable。
13.error(Drawable drawable).设置load失败时显示的Drawable。
14.listener(RequestListener<? super ModelType, TranscodeType> requestListener). 监听资源加
载的请求状态,可以使用两个回调:onResourceReady(R resource, T model,
Target<R> target, boolean isFromMemoryCache, boolean isFirstResource)
和onException(Exception e, T model, Target<R> target, boolean isFirstResource)
但不要每次请求都使用新的监听器,要避免不必要的内存申请,可以使用单例进行统一的异常监听和处理。
15.skipMemoryCache(boolean skip). 设置是否跳过内存缓存,但不保证一定不被缓存
(比如请求已经在加载资源且没设置跳过内存缓存,这个资源就会被缓存在内存中)。
16.override(int width, int height). 重新设置Target的宽高值(单位为pixel)。
17.into(Y target).设置资源将被加载到的Target。
18.into(ImageView view). 设置资源将被加载到的ImageView。取消该ImageView之前所有的加载并释放资源。
19.into(int width, int height). 后台线程加载时要加载资源的宽高值(单位为pixel)。
20.preload(int width, int height). 预加载resource到缓存中(单位为pixel)。
21.asBitmap(). 无论资源是不是gif动画,都作为Bitmap对待。如果是gif动画会停在第一帧。
22.asGif().把资源作为GifDrawable对待。如果资源不是gif动画将会失败,会回调.error()。
三、基于Glide简单封装的工具类
/**
* Glide简单封装
* Created by 谢栋 on 2017/10/26.
*/
public class GlideUtil {
private static Context context = AppManage.getInstance().currentActivity();
/**
* 简单获取图片
*
* @param path
* @param view
*/
public static void getImage(String path, ImageView view) {
Glide.with(context)
.load(path)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(view);
}
/**
* 根据指定大小加载图片
*
* @param path
* @param width
* @param height
* @param imageView
*/
public static void getImageBySize(String path, int width, int height, ImageView imageView) {
Glide.with(context)
.load(path)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.override(width, height)
.into(imageView);
}
/**
* 指定加载等待跟加载失败图片
*
* @param path
* @param imageView
* @param errorRes
* @param loadingRes
*/
public static void getImageWithErrorLoadingImg(String path, ImageView imageView, int errorRes, int loadingRes) {
Glide.with(context)
.load(path)
.placeholder(loadingRes)
.error(errorRes)
.into(imageView);
}
/**
* 是否跳过内存加载
*
* @param path
* @param view
* @param isSkipMemoryCache
*/
public static void getImage(String path, ImageView view, boolean isSkipMemoryCache) {
Glide.with(context)
.load(path)
.skipMemoryCache(isSkipMemoryCache)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.into(view);
}
/**
* 设置加载图片时的动画
*
* @param path
* @param imageView
* @param anim
*/
public static void getImageWithAnim(String path, ImageView imageView, int anim) {
Glide.with(context)
.load(path)
.animate(anim)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.into(imageView);
}
/**
* 加载动态Gif
*
* @param path
* @param imageView
*/
public static void getImageByDynamicGif(String path, ImageView imageView) {
Glide.with(context)
.load(path)
.asGif()
.centerCrop()
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(imageView);
}
/**
* 加载静态Gif
*
* @param path
* @param imageView
*/
public static void getImageByStaticGif(String path, ImageView imageView) {
Glide.with(context)
.load(path)
.asBitmap()
.centerCrop()
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(imageView);
}
/**
* 加载图片centerCrop()
*
* @param path
* @param view
*/
public static void getImageCenterCrop(String path, ImageView view) {
Glide.with(context)
.load(path)
.centerCrop()
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(view);
}
/**
* 带监听器加载图片
*
* @param path
* @param imageView
* @param requstlistener
*/
public static void getImageWithListener(String path, ImageView imageView, RequestListener<String, GlideDrawable> requstlistener) {
Glide.with(context)
.load(path)
.centerCrop()
.listener(requstlistener)
.placeholder(R.drawable.icon_calendar)
.error(R.drawable.error_circle)
.priority(Priority.NORMAL) //下载优先级
.into(imageView);
}
/**
* 清理内存缓存
*/
public static void clearMemaryCache() {
Glide.get(context)
.clearMemory();
}
/**
* 清理磁盘缓存
*/
public static void clearDiskCache() {
Glide.get(context)
.clearDiskCache();
}
}
边栏推荐
- 又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...
- Glory to the Blue Yonder, speeds up the strategic growth
- 无需精子卵子子宫体外培育胚胎,Cell论文作者这番话让网友们炸了
- [Microservice ~ Remote Call] Integrate RestTemplate, WebClient, Feign
- Flutter入门进阶之旅(十)Dialog&Toast
- 太卷了... 腾讯一面被问到内存满了,会发生什么?
- 索引index
- Programmer's Exclusive Romance - Use 3D Engine to Realize Fireworks in 5 Minutes
- ABAP 报表中如何以二进制方式上传本地文件试读版
- GPT-3组合DALL·E,60秒内搞定游戏设定和原型动画!网友看后:这游戏想玩
猜你喜欢
又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...
1小时直播招募令:行业大咖干货分享,企业报名开启丨量子位·视点
Byte Qiu Zhao confused me on both sides, and asked me under what circumstances would the SYN message be discarded?
西湖大学教授怎么看AI制药革命?|量子位智库圆桌实录
Win10 compiles the x264 library (there are also generated lib files)
内网穿透工具ngrok使用教程
听声辨物,这是AI视觉该干的???|ECCV 2022
2022 Niu Ke Duo School (6) M. Z-Game on grid
无重复字符的最长子串
微信一面:一致性哈希是什么,使用场景,解决了什么问题?
随机推荐
The core key points of microservice architecture
"Digital Economy Panorama White Paper" Special Analysis of Banking Industry Intelligent Marketing Application Released
Batch大小不一定是2的n次幂!ML资深学者最新结论
2022牛客多校(六)M. Z-Game on grid
Scala 高阶(七):集合内容汇总(上篇)
OpenSSF的开源软件风险评估工具:Scorecards
Golang学习之路(五):Golang的函数
两分钟录音就可秒变语言通!火山语音音色复刻技术如何修炼而成?
Intranet penetration tool ngrok usage tutorial
LeetCode #101. 对称二叉树
香港服务器如何进行加密?
一甲子,正青春,CCF创建六十周年庆典在苏州举行
放下手机吧:实验表明花20分钟思考和上网冲浪同样快乐
中科院打脸谷歌:普通电脑追上量子优越性,几小时搞定原本要一万年的计算...
Flutter入门进阶之旅(五)Image Widget
国产抗新冠口服药每瓶不超300元/ 我国IPv6网络全面建成/ 谷歌入局折叠屏手机...今日更多新鲜事在此...
8、IDEA提交代码出现: Fetch failed fatal: Could not read from remote repository
Flutter入门进阶之旅(六)Layout Widget
已解决IndentationError: unindent does not match any oute r indentation Level
MySQL查询性能优化七种武器之索引潜水