Glide,一个被google所推荐的图片加载库,常见的还有Picasso,Fresco等,每一个都非常稳定,功能也都十分强大。但是它们的使用场景基本都是重合的,也就是说我们基本只需要选择其中一个来进行学习和使用就足够了,每一个框架都尝试去掌握的话则有些浪费时间。最常用的是Glide和Picasso,今天就针对于Glide和Picasso的区别,以及Glide的简单使用来进行具体介绍

Picasso的基本用法

Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .into(ivImgPicasso);

Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .resize(768, 432) .into(ivImgPicasso);

Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .fit() .centerCrop() .into(ivImgPicasso);

这三种方法都可以加载图片显示到页面上,

第一种:加载了全尺寸的图片到内存,然后让GPU来实时重绘大小

第二种:你需要主动计算ImageView的大小,或者说你的ImageView大小是具体的值(而不是wrap_content),

第三种:按统一比例缩放图片(保存图片的尺寸比例)便于图片的二维(宽度和高度)等于或者大于相应的视图的维度,这种方法和Glide加载图片占用的内存几乎是相同的,虽然内存开销差距不大,但是在这个问题上Glide完胜Picasso。因为Glide可以自动计算出任意情况下的ImageView的大小。

Glide的基本用法:

Glide.with(this) .load("图片的URL".into(ivImgGlide);

load方法中不仅可以传入图片地址,还可以传入图片文件File,resource,图片的byte数组等

Glide与Picasso的区别:

1、内存:

加载同一张图片Picasso,Picasso的内存开销仍然远大于Glide。

2、Image质量的细节:

Glide默认的是Bitmap格式是RGB-565

Picasso默认ARGB_8888格式

Glide加载的图片没有Picasso那么平滑,但是很难察觉

3、磁盘缓存:

(1)Picasso缓存的是全尺寸的。而Glide缓存的跟ImageView尺寸相同

(2)将ImageView调整成不同大小不管大小如何设置。Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存一次

让Glide既缓存全尺寸又缓存其他尺寸的方法:

Glide.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide);

Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟,Glide比Picasso快,虽然需要更大的空间来缓存。

4、Gif动图

Glide可以加载Gif动图,Picasso不可以加载动图

Glide动画会消耗太多的内存,因此使用时谨慎使用

总结一下他们之间的区别:

(1)Glide比Picasso加载速度快,但Glide比Picasso需要更大的空间来缓存;

(2)Glide加载图像及磁盘缓存的方式都优于Picasso,且Glide更有利于减少OutOfMemoryError的发生;

(3)Glide可以加载Gif动图,Picasso不可以加载动图

(4)Picasso加载的图片比Glide加载的图片平滑(可忽略不计)

Glide的具体使用方法:

1、基本使用:

添加依赖,现在Glide最新的依赖有4.x.x的
dependencies {compile 'com.github.bumptech.glide:glide:3.7.0'
}

基本使用是:

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

2、with()

this可以是:

Context
Activity
Fragment
FragmentActivity
ApplicationContext

Context、Activity、Fragment、FragmentActivity,都是glide经过方法都是向activity中添加一个fragment,因为glide无法直接获取到activity,添加一个与activity绑定的fragment,可以保证glide随着activity的生命周期变化而停止暂时取消加载请求。

3、load()

load是核心的请求方法, 在源码中我们可以看到是在这里进行网络请求,

// 加载本地图片
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);

4、占位图

我们在实际加载图片的时候,由于各种原因比如网慢,一时无法请求回数据时,考虑到用户体验,一个占位图也是非常重要的

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

5、动图

asBitmap()去加载gif图片,那么只会显示静态图片,并且只显示动图的第一帧 
.asGif()去加载静态图片会显示错误图片,报错。

Glide.with(this).load(url).asBitmap().placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);

6、Glide 使用加载动画和禁止动画

glide默认有淡入淡出动画.crossFade()也可以不加,也有重载.crossFade(int duration),主要设置动画进行快慢,默认是300毫秒。

Glide.with(context).load(UsageExampleListViewAdapter.eatFoodyImages[0]).placeholder(R.mipmap.ic_launcher) .error(R.mipmap.future_studio_launcher).crossFade().into(imageViewFade);

7、设置图片大小;

.override(300, 200);   //设置加载图片尺寸大小

8、图片请求的优先级

Glide可以通过Priority枚举来设置加载图片的优先级,具体使用场景就是,我们点击一个页面时,先加载页面中重要的图片,再加载那些子图像

Priority (优先级)枚举给了四个不同的选项,下面是按照递增priority(优先级)的

Priority.LOW 最低
Priority.NORMAL 正常
Priority.HIGH 最高
Priority.IMMEDIATE 立即

注意:优先级并不是完全严格遵守的。Glide 将会用他们作为一个准则,并尽可能的处理这些请求,但是它不能保证所有的图片都会按照所要求的顺序加载。

.priority(Priority.HIGH); 

9、缩略图

缩略图不同于前面提到的占位图。占位图应当是跟app绑定在一起的资源。缩略图是一个动态的占位图,可以从网络加载。缩略图也会被先加载,直到实际图片请求加载完毕。如果因为某些原因,缩略图获得的时间晚于原始图片,它并不会替代原始图片,而是简单地被忽略掉。具体的应用场景有很多,可以提供几张图片便于大家理解

图中的1,2,3,4,5,6就是缩略图,7,就是原图;这样大家应该会理解一点了,我觉得吧(这里只是说一下自己的观点)缩略图一是用户体验较好,从用户的角度,我们已经看见了一个小版本的图片。点击才会加载同样的图片(高分辨率),二是省流量,一张原图或许需要几M但是一张缩略图或许只需要几K,

那怎么加载缩略图呢?Glide提供了2个不同的方法产生缩略图。

第一种,是通过在加载的时候指定一个小的分辨率,产生一个缩略图。

.thumbnail( 0.1f )里面的参数是一个浮点乘法运算

这个方法是啥意思呢?

例如,传递一个0.1f作为参数,Glide会加载原始图片大小的10%的图片。

原始图片---->1000x1000像素,

则缩略图---->100x100像素。

由于图片将会比ImageView小,你需要确保缩放类型是否正确。

注意:你所有的请求设置都会影响到你的缩略图。例如,如果你使用了一个变换让你的图片变为灰度图,缩略图也同样将会是灰度图。

第二个方法是传递一个新的Glide请求作为参数,我们看看例子

这种方法的应用场景:虽然用.thunmbnail()这种方法简单有效,但也不是总有意义的。为啥这么说呢,如果缩略图需要从网络加载同样全分辨率图片,可能不是不快。所以提供了第二种方法

DrawableRequestBuilder<String> thumbnailRequest = Glide.with( context ).load( eatFoodyImages[2] );Glide.with( context ).load( UsageExampleGifAndVideos.gifUrl ).thumbnail( thumbnailRequest ).into( imageView3 );

第一个缩略图请求跟第二个是完全没有关系的,可以是不同的Url,对其进行不同的转换

如果你觉得不够刺激,你还可以用递归用一个额外的缩略图去请求一个缩略图

10、缓存

我们都知道Glide是自带缓存的,所有的图片请求都会被缓存在内存和磁盘上。大多数情况下,缓存是一个非常有用的东西,但在一些特殊的情况下并不是很明智。比如,如果你有一张不段变化的图片,但是都是用的同一个URL,这时候就需要我们避免缓存,Glide提供了一些方法避免内存存储和磁盘存储;

禁止内存存储

.skipMemoryCache( true )

去特意告诉Glide跳过内存缓存,这个只影响内存缓存!Glide为了避免以后的网络请求,仍然会缓存到磁盘。

禁止磁盘存储:

如果你想要禁止请求的磁盘缓存,使用枚举型变量DiskCacheStrategy.NONE作为参数。

.diskCacheStrategy( DiskCacheStrategy.NONE )

.diskCacheStrategy()中枚举参数以及意义:

DiskCacheStrategy.NONE 啥也不缓存DiskCacheStrategy.SOURCE 只缓存全尺寸图.DiskCacheStrategy.RESULT 只缓存最终降低分辨后用到的图片DiskCacheStrategy.ALL 缓存所有类型的图片 (默认)

结合两个方法就可以同时禁止内存存储和磁盘缓存了

上面是我对Glide的简单理解,希望可以帮助到大家!之后会对Glide源码进行分析,有问题可以在评论区留言。

May everyone be happy every day and everything go well!

Android图片加载框架之(Glide和Picasso的区别,Glide的简单使用)相关推荐

  1. Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

    本文转载自郭神的Glide分析系列:http://blog.csdn.net/guolin_blog/article/details/78582548 本文同步发表于我的微信公众号,扫一扫文章底部的二 ...

  2. Android图片加载框架 Glide 4 的用法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78582548 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  3. Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53939176 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  4. Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78357251 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  5. Android图片加载框架最全解析(三),深入探究Glide的缓存机制

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/54895665 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  6. Android图片加载框架——Glide(Glide v4)

    原文地址 Android图片加载框架--Glide(Glide v4) 前言 android中图片加载框架有很多,所有框架最终达到的目都是在Android平台上以极度简单的方式加载和展示图片,如果我们 ...

  7. Android图片加载框架最全解析(五)

    由此我们可以得知,在没有明确指定的情况下,ImageView默认的scaleType是FIT_CENTER. 有了这个前提条件,我们就可以继续去分析Glide的源码了.当然,本文中的源码还是建在第二篇 ...

  8. Android图片加载框架

    这篇文章主要和大家一起动手编写Android图片加载框架,从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,感兴趣的小伙伴们可以参考一下 开发一个简洁而实用的And ...

  9. 介绍一下google推荐的Android图片加载框架——Glide

    [译文原文]:Introduction to Glide, Image Loader Library for Android, recommended by Google 在泰国举行的Google开发 ...

  10. android glide的历史,Android 图片加载的那些事:为什么你的Glide 缓存没有起作用?...

    前言Glide,该功能非常强大 Android  图片加载开源框架 相信大家并不陌生 正由于他的功能强大,所以它的源码非常复杂,这导致很多人望而却步 本人尝试将 Glide 的功能进行分解,并单独针对 ...

最新文章

  1. 王家豪:求实探索,青春无问西东;脚踏实地,奋斗自成芳华 | 提升之路系列...
  2. pycharm goland clion 修改注释颜色
  3. Java继承_Java面试题总结(一)
  4. linux系统下替换图片,Linux(ubuntu系统)下使用FreeImage库
  5. ajax then jquery,使用Jquery.ajax()。then()时无法.catch()错误
  6. 关于vue如何解决数据渲染完成之前,dom树显示问题
  7. 机器学习-逻辑回归-信用卡检测任务
  8. LeetCode-151 Reverse Worlds in a String
  9. awr报告 解读_AWR报告分析解读
  10. OFFICE技术讲座:JDK绘制旋转字体的效果(垂直)
  11. iOS - JSON 数据解析
  12. Cknife流量分析
  13. 王达人漫展1,cosplay
  14. 文件排版2.2 (python)
  15. emwin模拟器编译环境搭建及helloworld例程
  16. 1183: 平面点排序(一)(结构体专题)C语言
  17. verilog行为级建模(1)
  18. 联想Y410pY510p外置显卡Vbios,Y400Y500外置显卡VBIOS, ULTRABAY白名单,卡白名单。
  19. 003 愚人节的“礼物”
  20. Win8系统hiberfil.sys是什么文件?Win8系统hiberfil.sys怎么删除?

热门文章

  1. 字符串_月隐学python第7课
  2. 两平面平行方向向量关系_一文读懂 GDT 中的平面度
  3. php post处理,PHP处理GETPOST方法
  4. Java中加减乘除怎样写代码,【求助】怎样实现加减乘除 代码如下
  5. 计算机检索高考投档线,投档分数线是什么意思 2018各大学投档线是多少
  6. ajax 局部页面替换innerhtml,ajax jquery 页面局部刷新的不同实现代码
  7. Linux ab 命令
  8. python安装mysqlclient模块报fatal error: Python.h:解决方法
  9. BURP 测试出 OPTIONS PUT DELETE TRACE 方法
  10. 2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟