Glide使用总结

首先,添加依赖

implementation 'com.github.bumptech.glide:glide:4.5.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'

之后添加访问网络权限

<uses-permission android:name="android.permission.INTERNET" />

一、常用的方法

1、加载图片到imageView

Glide.with(Context context).load(Strint url).into(ImageView imageView);

2、各种形式的图片加载到ImageView

// 加载本地图片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);// 加载应用资源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);// 加载二进制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);// 加载Uri对象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);

3、加载带有占位图

Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);

占位图目的为在目的图片还未加载出来的时候,提前展示给用户的一张图片;
4、加载失败 放置占位符

Glide.with(this).load(url).placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE)//关闭Glide的硬盘缓存机制.into(imageView);//DiskCacheStrategy.NONE: 表示不缓存任何内容。
//DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
//DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。
//DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。

5、加载指定格式的图片--指定为静止图片

Glide.with(this).load(url).asBitmap()//只加载静态图片,如果是git图片则只加载第一帧。.placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);

6、加载动态图片

Glide.with(this).load(url).asGif()//加载动态图片,若现有图片为非gif图片,则直接加载错误占位图。.placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);

7、加载指定大小的图片

Glide.with(this).load(url).placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).override(100, 100)//指定图片大小.into(imageView);

8、关闭框架的内存缓存机制

Glide.with(this).load(url).skipMemoryCache(true)  //传入参数为false时,则关闭内存缓存。.into(imageView);

9、关闭硬盘的缓存

Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.NONE)     //关闭硬盘缓存操作.into(imageView);//其他参数表示:
//DiskCacheStrategy.NONE: 表示不缓存任何内容。
//DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
//DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。
//DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。

10、当引用的 url 存在 token 时解决方法-->重写 Glide 的 GlideUrl 方法

public class MyGlideUrl extends GlideUrl {private String mUrl;public MyGlideUrl(String url) {super(url);mUrl = url;}@Overridepublic String getCacheKey() {return mUrl.replace(findTokenParam(), "");}private String findTokenParam() {String tokenParam = "";int tokenKeyIndex = mUrl.indexOf("?token=") >= 0 ? mUrl.indexOf("?token=") : mUrl.indexOf("&token=");if (tokenKeyIndex != -1) {int nextAndIndex = mUrl.indexOf("&", tokenKeyIndex + 1);if (nextAndIndex != -1) {tokenParam = mUrl.substring(tokenKeyIndex + 1, nextAndIndex + 1);} else {tokenParam = mUrl.substring(tokenKeyIndex);}}return tokenParam;}}

然后加载图片的方式为:

Glide.with(this).load(new MyGlideUrl(url)).into(imageView);

11、利用Glide将图片加载到不同控件或加载成不同使用方式
(1)、拿到图片实例

//1、通过自己构造 target 可以获取到图片实例
SimpleTarget<GlideDrawable> simpleTarget = new SimpleTarget<GlideDrawable>() {@Overridepublic void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {imageView.setImageDrawable(resource);}
};//2、将图片实例记载到指定的imageview上,也可以做其他的事情
public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).into(simpleTarget);
}

(2)、将图片加载到任何位置

/*
*将图片加载为控件背景
*/
public class MyLayout extends LinearLayout {private ViewTarget<MyLayout, GlideDrawable> viewTarget;public MyLayout(Context context, AttributeSet attrs) {super(context, attrs);viewTarget = new ViewTarget<MyLayout, GlideDrawable>(this) {@Overridepublic void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {MyLayout myLayout = getView();myLayout.setImageAsBackground(resource);}};}public ViewTarget<MyLayout, GlideDrawable> getTarget() {return viewTarget;}public void setImageAsBackground(GlideDrawable resource) {setBackground(resource);}}//引用图片到指定控件作为背景
public class MainActivity extends AppCompatActivity {MyLayout myLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myLayout = (MyLayout) findViewById(R.id.background);}public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).into(myLayout.getTarget());}}

12、Glide 实现预加载

//a、预加载代码
Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).preload();//preload() 有两种重载// 1、带有参数的重载,参数作用是设置预加载的图片大小;
//2、不带参数的表示加载的图片为原始尺寸;//b、使用预加载的图片
Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);

切记:diskCacheStrategy() 方法内必须设置参数为:“ DiskCacheStrategy.SOURCE ”,否则可能预加载失败,导致显示图片时,需要重新加载。

13、Glide 实现图片下载
使用 downloadOnly(int width, int height)downloadOnly(Y target) 方法替代 into(view) 方法。

public void downloadImage(View view) {new Thread(new Runnable() {@Overridepublic void run() {try {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";final Context context = getApplicationContext();FutureTarget<File> target = Glide.with(context).load(url).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);final File imageFile = target.get();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(context, imageFile.getPath(), Toast.LENGTH_LONG).show();}});} catch (Exception e) {e.printStackTrace();}}}).start();
}

(1)、有两个参数的 downloadOnly(int width, int height) 方法表示指定下载尺寸,用于在子线程内进行下载;
(2)、一个参数的 downloadOnly(Y target) 方法 在主线程内进行下载
(3)、target.get() 方法可以获取到下载文件保存路径;

使用下载完的图片的方式

public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
}

注意: diskCacheStrategy() 方法的参数应该为 DiskCacheStrategy.SOURCE 或者 DiskCacheStrategy.ALL否则可能导致加载图片到控件的时候,需要重新加载。

13、监听 Glide 加载的状态

public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).listener(new RequestListener<String, GlideDrawable>() {@Overridepublic boolean onException(Exception e, String model, Target<GlideDrawable> target,boolean isFirstResource) {return false;}@Overridepublic boolean onResourceReady(GlideDrawable resource, String model,Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {return false;}}).into(imageView);
}

(1)、onException() 方法表示加载失败,onResourceReady() 表示加载成功;
(2)、 每个方法都有一个 boolean 的返回值,false表示未处理、true 表示处理。

14、Glide 的图形变换功能
(1)、禁用图形变换功能

Glide.with(this).load(url).dontTransform().into(imageView);

这个方法时全局的,导致其他地方的图片也不可进行图形变换了。

修改方法

Glide.with(this).load(url).override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).into(imageView);

通过 override() 方法设置大小

(2)、简单的图形变换

Glide.with(this).load(url).centerCrop().into(imageView);Glide.with(this).load(url).fitCenter().into(imageView);

通过 centerCrop()方法 按照原始的长宽比充满全屏和 fitCenter() 方法 对原图的中心区域进行裁剪对图片进行相关设置。

(3)、override() 方法与 centerCrop() 方法配合使用

String url = "http://cn.bing.com/az/hprichbg/rb/AvalancheCreek_ROW11173354624_1920x1080.jpg";
Glide.with(this).load(url).override(500, 500).centerCrop().into(imageView);

img_0a23408d48dd32475701fef48dbca907.png
样图

(4)、复杂的图像变换
首先需要再引入一个 第三方框架 。

dependencies {implementation 'jp.wasabeef:glide-transformations:3.3.0'// If you want to use the GPU Filtersimplementation 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
}

其次,部分样例:
图片虚化

Glide.with(this).load(url).bitmapTransform(new BlurTransformation(this)).into(imageView);

图片黑白化

Glide.with(this).load(url).bitmapTransform(new GrayscaleTransformation(this)).into(imageView);

多个属性同时使用

Glide.with(this).load(url).bitmapTransform(new BlurTransformation(this), new GrayscaleTransformation(this)).into(imageView);

还有更多的好玩的属性,请到框架官网查看:https://github.com/wasabeef/glide-transformations

15、探究Glide的自定义模块功能
请查看 郭神 的文章 《Android图片加载框架最全解析(六),探究Glide的自定义模块功能》 。

16、带进度的Glide图片加载功能
请查看 郭神 的文章Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能 。

17、Glide 4用法
请查看 郭神 的文章Android图片加载框架最全解析(八),带你全面了解Glide 4的用法 。

注意: 本文的大量方法摘抄在郭神的博客,若想更加全面的了解Glide请查看郭神的博客:

郭神的 《Glide最全解析》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Segments POJ 3304 直线与线段是否相交

题目大意&#xff1a;给出n条线段&#xff0c;问是否存在一条直线&#xff0c;使得n条线段在直线上的投影有至少一个公共点。 题目思路:如果假设成立&#xff0c;那么作该直线的垂线l&#xff0c;该垂线l与所有线段相交&#xff0c;且交点可为线段中的某两个交点 证明&#xff…

Linux Socket编程(不限Linux)

“一切皆Socket&#xff01;” 话虽些许夸张&#xff0c;但是事实也是&#xff0c;现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值&#xff0c;那网络中进程之间如何通信&#xff0c;如我们每天打开浏览器浏览网页时&#xff…

shell之计算文本中单词出现频率

2019独角兽企业重金招聘Python工程师标准>>> Word Frequency&#xff08;https://leetcode.com/problems/word-frequency/description/&#xff09; Example: Assume that words.txt has the following content: the day is sunny the the the sunny is is Your scr…

dyld: Library not loaded: @rpath/libswiftCore.dylib 解决方法

解决&#xff1a; 设置Build Setting - > 搜索 embe关键字 -> 修改属性 见如下图&#xff1a; 如果更新了Xcode 8 这里变成&#xff1a; 转载于:https://www.cnblogs.com/yajunLi/p/5979621.html

Dubbo之RPC架构

为什么会有dubbo的出现: 随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对&#xff0c;分布式服务架构以及流动计算架构势在必行&#xff0c;亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时&#xff0c…

区域路由的注册机制

AreaRegistration.RegisterAllAreas() 我们新建一个名称为Admin的Area&#xff0c;VS生成下面的代码。 { action , id 我们先来看AreaRegistration这个抽象类&#xff0c;实际上&#xff0c;它只有一个核心功能&#xff0c;就是RegisterAllAreas&#xff0c;获取所有继承它的…

嵌入式Linux系统基础知识

一、嵌入式Linux系统的构成 1、硬件 2、内核 3、应用程序&#xff08;形成根文件系统&#xff09; 二、构建嵌入式Linux系统的主要任务 1、内核部分 2、应用程序部分 嵌入式Linux的开发大致可分为三个层次&#xff1a;引导装载内核、构造文件系统和图形用户界面。作为操作系统…

各种排序笔记---基于比较排序部分

1. 选择排序 selection sort 大循环 从左到右每次以一个点开始扫描array 小循环 找到从当前起始点开始的最小值 时间复杂度为O(N^2) //selection sort an array array[] public class Solution {public int[] solve(int[] array) {if (array null || array.length 0) {return…

halcon使用点拟合圆形时候,点集顺序紊乱,不影响圆形拟合效果

read_image (Image, 截图20201226094342972.bmp) * Matching 01: BEGIN of generated code for model initialization set_system (border_shape_models, false) * Matching 01: Obtain the model image * Matching 01: The image is assumed to be made available in the * Ma…

Socket理解。

其他大部分系统&#xff0c;例如CRM/CMS/权限框架/MIS之类的&#xff0c;无论怎么复杂&#xff0c;基本上都能够本地代码本地调试&#xff0c;性能也不太重要。&#xff08;也许这个就是.net的企业级开发的战略吧&#xff09; 可是来到通讯系统&#xff0c;一切变得困难复杂。原…

多元化时代敏捷软件开发的崛起与传统软件工程的延续

多元化时代敏捷软件开发的崛起与传统软件工程的延续 1.传统软件开发模式 1.1瀑布模型 1.1.1概念 瀑布模型&#xff0c;顾名思义&#xff0c;软件开发的过程如同瀑布飞流一般&#xff0c;自上而下&#xff0c;逐级下落。瀑布模型的核心思想是将问题按照工序进行简化&#xff0c;…

【VMware vSAN 6.6】6.2.启用性能服务:vSAN硬件服务器解决方案

目录 1. 简介 1.1.适用于HCI的企业级存储2. 体系结构 2.1.带有本地存储的服务器2.2.存储控制器虚拟系统套装的缺点2.3.vSAN在vSphere Hypervisor中自带2.4.集群类型2.5.硬件部署选项3. 启用vSAN 3.1.启用vSAN3.2.轻松安装3.3.主动测试4. 可用性 4.1.对象和组件安置4.2.重新构建…

Android eclipse导入项目后出现Unable to resolve target #39;android-17#39;解决方法

eclipse导入项目后出现Unable to resolve target android-17解决方法。在最后附带还有一种编译逻辑不成功情况解决方法。 一、问题情况 二、解决的方法 1、改动项目的目标版本号与当前Android sdk相相应的版本号 2、自己主动修复一下项目 三、这个问题不是上面的。是另外情况&a…

多个圆点,鼠标选取两个,求两个点的距离,用于计算像素尺寸(halcon实现)

read_image (Image, C:/Users/22967/Desktop/晶圆找位置/0.bmp) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region1, max_separability, dark, UsedThreshold) connection (Region1, C…

修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)

Posted on 2011-10-31 10:53 jamiedu 阅读(889) 评论(0) 编辑 收藏 1.1 概述 TI针对DM6467提供的UBOOT和内核默认都是串口0作为调试串口输出的&#xff0c;但现在我需要使用DM6467的UART0的modem功能&#xff0c;所以修改代码&#xff0c;改变调试串口为串口2。 需要修改的主要…

halcon车刀崩边检测

list_files (新建文件夹, files, Files) read_image (Image, Files[0]) dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/1.5, Height/1.5, black, WindowHandle) dev_set_draw (margin) dev_set_colored (12) for Index:0 to |Files…

FFMPEG解码264文件步骤

本文以H264视频流为例&#xff0c;讲解解码流数据的步骤。 为突出重点&#xff0c;本文只专注于讨论解码视频流数据&#xff0c;不涉及其它&#xff08;如开发环境的配置等&#xff09;。如果您需要这方面的信息&#xff0c;请和我联系。 准备变量 定义AVCodecContext。如果…

Confluence 6 配置服务器基础地址示例

2019独角兽企业重金招聘Python工程师标准>>> 如果 Confluence 的安装是没有安装在非根目录路径&#xff08;这个是上下文路径&#xff09;&#xff0c;然后服务器基础 URL 地址应该包括上下文地址。例如&#xff0c;你的 Confluence 正在运行在下面的地址&#xff1…

BootstrapValidator验证

bootstrap&#xff1a;能够增加兼容性的强大框架. 因为项目需要数据验证&#xff0c;看bootstrapValidator 还不错&#xff0c;就上手一直&#xff0c;完美兼容&#xff0c;话不多说。 需要引用css&#xff1a; bootstrap.min.css bootstrapValidator.min.css js: jquery-1.10.…