简单介绍

在泰国举行的谷歌开发人员论坛上,谷歌为我们介绍了一个名叫 Glide 的图片载入库,作者是 bumptech。这个库被广泛的运用在 google 的开源项目中,包含 2014 年 google I/O 大会上公布的官方 app。

特点

(1)使用简单

(2)可配置度高,自适应程度高

(3)支持常见图片格式 : Jpg png gif webp

(4)支持多种数据源: 网络、本地、资源、Assets 等

(5)高效缓存策略: 支持 Memory 和 Disk 图片缓存,默认 Bitmap 格式採用 RGB_565, 内存使用至少降低一半.

(6)生命周期集成: 依据 Activity/Fragment 生命周期自己主动管理请求

(7)高效处理 Bitmap : 使用Bitmap Pool 使 Bitmap 复用,主动调用 recycle 回收须要回收的 Bitmap,减小系统回收压力.

功能API介绍:

1)简单使用:

Glide
.with(this)
.load("http://xxx.com/source/a.png")
.into(imageView);

2)Glide.with() 的使用

(1)with(Context context). 使用 Application 上下文,Glide 请求将不受 Activity/Fragment 生命周期控制。

(2)with(Activity activity).使用 Activity 作为上下文。Glide 的请求会受到 Activity 生命周期控制。

(3)with(FragmentActivity activity).Glide 的请求会受到FragmentActivity 生命周期控制。

(4)with(android.app.Fragment fragment).Glide 的请求会受到Fragment 生命周期控制。

(5)with(android.support.v4.app.Fragment fragment).Glide 的请求会受到 Fragment 生命周期控制。

3)load() 的使用

Glide 基本能够 load 不论什么能够拿到的媒体资源

  • SD 卡资源:

    load(“file://”+ Environment.getExternalStorageDirectory().getPath()+”/test.jpg”)
  • assets 资源:

    load(“file:///android_asset/3.gif”)
  • raw 资源:

    load(“Android.resource://com.frank.glide/raw/raw_1”) 或load(“android.resource://com.frank.glide/raw/”+R.raw.raw_1)
  • drawable 资源:

    load(“android.resource://com.veyron.glide/drawable/news”)或load(“android.resource://comveyron.glide/drawable/”+R.drawable.news)
  • ContentProvider 资源:

    load(“content://media/external/images/media/139469”)
  • http 资源:

    load(“http://img.my.csdn.NET/uploads/201508/05/1438760757_3588.jpg“)
  • https 资源:

    load(“https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp“)

此外,load 不限于 string 类型:

load(Uri uri),load(File file),load(Integer resourceId),load(URL url)。load(byte[] model),load(T model),loadFromMediaStore(Uri uri)。 

4)重要功能

(1)禁止内存缓存: .skipMemoryCache(true)
(2)清除内存缓存: // 必须在UI线程中调用
Glide.get(context).clearMemory();
(3)禁止磁盘缓存: .diskCacheStrategy(DiskCacheStrategy.NONE)
(4)清除磁盘缓存: // 必须在后台线程中调用。建议同一时候clearMemory()
Glide.get(applicationContext).clearDiskCache();
(5)获取缓存大小: new GetDiskCacheSizeTask(textView).execute(new File(getCacheDir(), DiskCache.Factory.DEFAULT_DISK_CACHE_DIR)); class GetDiskCacheSizeTask extends AsyncTask<File, Long, Long> {
private final TextView resultView; public GetDiskCacheSizeTask(TextView resultView) {
this.resultView = resultView;
} @Override
protected void onPreExecute() {
resultView.setText("Calculating...");
} @Override
protected void onProgressUpdate(Long... values) { /* onPostExecute(values[values.length - 1]); */ } @Override
protected Long doInBackground(File... dirs) {
try {
long totalSize = 0;
for (File dir : dirs) {
publishProgress(totalSize);
totalSize += calculateSize(dir);
}
return totalSize;
} catch (RuntimeException ex) {
final String message = String.format("Cannot get size of %s: %s", Arrays.toString(dirs), ex);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
resultView.setText("error");
Toast.makeText(resultView.getContext(), message, Toast.LENGTH_LONG).show();
}
});
}
return 0L;
} @Override
protected void onPostExecute(Long size) {
String sizeText = android.text.format.Formatter.formatFileSize(resultView.getContext(), size);
resultView.setText(sizeText);
} private static long calculateSize(File dir) {
if (dir == null) return 0;
if (!dir.isDirectory()) return dir.length();
long result = 0;
File[] children = dir.listFiles();
if (children != null)
for (File child : children)
result += calculateSize(child);
return result;
}
} (6)指定资源的优先载入顺序:
//优先载入
Glide
.with(context)
.load(heroImageUrl)
.priority(Priority.HIGH)
.into(imageViewHero);
//后载入
Glide
.with(context)
.load(itemImageUrl)
.priority(Priority.LOW)
.into(imageViewItem); (7)先显示缩略图,再显示原图:
//用原图的1/10作为缩略图
Glide
.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.thumbnail(0.1f)
.into(iv_0); //用其他图片作为缩略图
DrawableRequestBuilder<Integer> thumbnailRequest = Glide
.with(this)
.load(R.drawable.news); Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.thumbnail(thumbnailRequest)
.into(iv_0);
(8)对图片进行裁剪、模糊、滤镜等处理:详细看demo源代码

5)部分api介绍:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVhZl8xMzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">

补充:

CenterCrop
CenterCrop() 是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内而且裁剪额外的部分。ImageView 可能会全然填充,但图像可能不会完整显示。
FitCenter
fitCenter() 也是裁剪技术,即缩放图像让图像都測量出来等于或小于 ImageView 的边界范围。该图像将会全然显示,但可能不会填满整个 ImageView。

使用步骤:

1)在 build.gradle 中加入依赖:

compile 'com.github.bumptech.glide:glide:3.7.0'

2)假设你的项目没有 support-v4 库,还须要加入 support-v4 依赖:

 compile 'com.android.support:support-v4:23.3.0'

3)假设使用变换。能够加入一个自己定义的变换库

加入依赖:

compile 'jp.wasabeef:glide-transformations:2.0.1'
// If you want to use the GPU Filters
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0'

Demo

ExampleForGlide

后话

欢迎关注我的微信公众号

不仅仅是原创技术文章,很多其他的是对生活的思考总结

【Android 进阶】图片载入框架之Glide的更多相关文章

  1. Android图片载入框架最全解析(一),Glide的基本使用方法

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

  2. Universal-Image-Loader(UIL)图片载入框架使用简介

    这个也是近期项目中使用到的第三方图片载入框架.在这里也自己总结一下,简单的介绍一些使用的方式. UIL图片载入框架特点 简单介绍: 项目地址:https://github.com/nostra13/A ...

  3. Android批量图片载入经典系列——afinal框架实现图片的异步缓存载入

    一.问题描写叙述 在之前的系列文章中,我们使用了Volley和Xutil框架实现图片的缓存载入,接下来我们再介绍一下afinal 框架的使用. Afinal 是一个android的http框架.sql ...

  4. 具体解说Android的图片下载框架UniversialImageLoader之磁盘缓存(一)

    沉浸在Android的开发世界中有一些年头的猴子们,预计都可以深深的体会到Android中的图片下载.展示.缓存一直是心中抹不去的痛.鄙人亦是如此.Ok,闲话不说.为了督促自己的学习.以下就逐一的挖掘 ...

  5. 一个方便的图片载入框架——ImageViewEx

    我的博客:http://mrfufufu.github.io/ 一.前言 近期在整理项目中的一些代码,以备即将开展的新项目中使用,刚刚整理到一个图片载入的 lib.用起来很的简单,和 picasso ...

  6. Android 使用动态载入框架DL进行插件化开发

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456    (来自时之沙的csdn博客) 概述: 随着应用的不断迭代.应用的体积不断增大,项目越来越臃肿,冗余添 ...

  7. Android批量图片载入经典系列——Volley框架实现多布局的新闻列表

    一.问题描写叙述 Volley是Google 2013年公布的实现Android平台上的网络通信库,主要提供网络通信和图片下载的解决方式,比方曾经从网上下载图片的步骤可能是这种流程: 在ListAda ...

  8. Android进阶图片处理之三级缓存方案

    图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...

  9. Android批量图片载入经典系列——使用LruCache、AsyncTask缓存并异步载入图片

    一.问题描写叙述 使用LruCache.AsyncTask实现批量图片的载入并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)载入图片,并放入缓存中 2.及时 ...

随机推荐

  1. Concurrency pattern

    In software engineering, concurrency patterns are those types of design patterns that deal with the  ...

  2. 数据库应用_innobackupex备份与恢复

    1.Percona软件介绍; 2.innobackupex的备份与恢复 一, Percona软件 在学习percona软件之前,我们看一下物理备份和mysqldump备份有哪些缺陷. 物理备份的缺点: ...

  3. NodeJS学习笔记 (9)网络服务-https(ok)

    模块概览 这个模块的重要性,基本不用强调了.在网络安全问题日益严峻的今天,网站采用HTTPS是个必然的趋势. 在nodejs中,提供了 https 这个模块来完成 HTTPS 相关功能.从官方文档来看 ...

  4. UVA-10003 Cutting Sticks 动态规划 找分界点k的动规

    题目链接:https://cn.vjudge.net/problem/UVA-10003 题意 有根棍子,上面有些分割点(n<50),每次按分割点切割棍子时,费用为当前棍子的长度. 问有什么样的 ...

  5. 管理windows自启动程序

    1. 点击开始,在运行程序框中输入msconfig,然后回车. 在弹出的对话框中,点击”启动“选项卡,在启动项目列表中,把不需要的启动项目前面的对号去掉. 然后切换到”服务“选项卡,这里的服务项目列表 ...

  6. 关于iptables允许samba的问题

    今天同事跟我说他们部门的共享不能用了,想了想,最近变更的只有iptables,于是看看是否是这个原因,发现没有允许samba的入站和出站规则,我的iptables规则默认是所有都drop的,但是不知确 ...

  7. Vue style里面使用@import引入外部css, 作用域是全局的解决方案

    问题描述 使用@import引入外部css,作用域却是全局的 <template> </template> <script> export default { na ...

  8. Linux的硬链接、软连接与拷贝

    Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).硬链接:创建一个与原文件任何信息都相同的目标文件(文件名可能不同,自由设定).硬连接的 ...

  9. 2015 Multi-University Training Contest 1 y sequence

    Y sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  10. BNUOJ 36005 Chemical Reaction

    Chemical Reaction Time Limit: 3000ms Memory Limit: 65536KB This problem will be judged on OpenJudge. ...