【Android 进阶】图片加载框架之Glide

Android进阶之——图片库 Glide代码应用如此简单 Android开发进阶总会遇到很多第三方框架,其中Glide和Fresco是处理图片的两个非常好的第三方框架。接下来我们用实例去了解这两个框架到底怎么处理。 阅读详情

简介

在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 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 任何可以拿到的媒体资源

此外,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介绍:

这里写图片描述

这里写图片描述

补充:

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 解析 本文是阅读郭大神的八篇Android图片加载框架最全解析后,根据自己的理解做的笔记,本篇基于 Glide3.7.0讲解。 一、Glide简介 Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。 二、Glide的基本用法 Glide.with(this) .load(url) .asBitmap() //加载静态图 .placeholder(R.drawable.loading)//加载过程中的占位图 .er 阅读详情

相关推荐

Android 图片加载框架 Glide 详细介绍

内存缓存:用于存储已经加载的图片数据,以避免重复读取内存中的数据。这可以显著提高图片显示的速度,因为内存的访问速度远快于从硬盘或网络加载数据。硬盘缓存:用于存储从网络或其他来源下载的图片数据,以防止重复下载。这不仅可以节省带宽,还能提高应用的响应速度,尤其是在网络条件不佳时。

编程小鹏的博客 1386

android glide支持的格式,Glide-Android最常用的图片加载框架

一、概述Glide目前在Android的开发中非常的受欢迎,几乎是随便开一个项目都会想到使用glide当图片加载框架。有兴趣可以阅读下Glide源码。在附上Glide官方使用文档: https://muyangmin.github.io/glide-docs-cn/doc/options.html1.主要特点(1)支持Memory和Disk图片缓存。(2)支持gif和webp格式图片。(3)根据A...

weixin_36341727的博客 1250

Android 进阶技术汇总十: 图片加载框架比较(ImageLoader+Picasso+Glide)

一、ImageLaoder介绍 <<Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置 支持图片的内存缓存,文件系统...

caobaokang的专栏 649

Glide系列(一) — Glide 框架结构浅析

Glide 是一个图片加载库,跟它同类型的库还有 Picasso、Fresco、Universal-Image-Loader 等。 Glide 框架的优点如下: 1. 加载类型多样化:Glide 支持 Gif、WebP 等格式的图片。 2. 生命周期的绑定:图片请求与页面生命周期绑定,避免内存泄漏。 3. 高效的缓存策略: 1. 支持多种缓存策略 (Memory 和 Disk 图片缓存)。 2. 根据 ImageView 的大小来加载相应大小的图片尺寸。 3. 内存开销小。

Elson的博客 2万+

Glide框架在Android中加载GIF图片的全面指南

Glide是一个开源的图片加载和缓存库,主要用于Android开发。其设计目标是简化图片加载流程,通过直观的API和灵活的拓展性,帮助开发者高效、高质量地处理图片资源。在处理大量或高清晰度的图片时,一个合适的缓存策略至关重要。这不仅可以提升用户体验,还能有效降低网络使用率和服务器负载。在Glide中,我们可以对内存缓存和磁盘缓存进行定制,以适应不同的需求。在使用Glide的过程中,可能会遇到一些常见的问题和挑战。下面列举了一些常见的问题及其解决方案:图片加载失败问题。

weixin_35696112的博客 1202

glide加载和下载svg矢量图片

glide加载和下载svg矢量图片

(原创)详解Glide图片加载库常用方法

Glide图片加载库常用方法

Android_xiong_st的博客 1万+

用Python+Charles搞定小程序付费短剧下载(附完整代码与避坑点)

本文详细介绍了如何利用Python和Charles抓包工具实现小程序付费短剧的自动化下载。通过分析小程序视频接口、破解请求参数,并编写Python脚本,读者可以轻松获取并保存短剧内容。文章还提供了完整的代码示例和常见问题的解决方案,特别适合对视频采集和抓包技术感兴趣的开发者。

weixin_28731231的博客 1190

安卓开发中的Glide库的使用

是一个功能强大的工具,它允许对加载的图片进行各种变换处理。使用方式:首先调用 Glide.with(context),然后指定要加载的图片资源,最后调用 into(imageView) 将图片设置到 ImageView。更新 ID:如果你想要 Glide 缓存经过此变换的图片,你需要重写 equals 和 hashCode 方法,以确保不同的变换实例能被正确识别。android.permission.WRITE_EXTERNAL_STORAGE:允许应用程序写入存储在外部存储上的文件,例如SD卡。

m0_66843126的博客 3118

实战指南:如何用Elasticsearch+Milvus搭建十亿级多模态搜索系统(含性能调优)

本文详细介绍了如何利用Elasticsearch和Milvus构建十亿级多模态搜索系统,包括架构设计、性能调优和实战部署。通过混合架构实现高效文本检索与向量相似度计算,显著提升查询性能与扩展能力,适用于大规模多模态数据处理场景。

x8y9z0的博客 1172

电脑主板开机12步流程全解析:从按下电源键到BIOS启动的完整过程

本文深入解析了电脑主板从按下电源键到BIOS启动的完整12步流程,详细阐述了待机电路、主供电上电、CPU供电建立、时钟信号分发及复位链等关键硬件协同工作原理。通过剖析电脑主板的电路结构与芯片协作时序,帮助读者构建系统性的硬件故障诊断思维,精准定位开机故障。

weixin_29290963的博客 265

Android--Glide图片加载学习笔记

结合Glide讲文,做一篇Glide学习笔记,Glide生命周期绑定+加载流程+缓存机制,附源码讲解

qq_51068452的博客 862

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信

RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。

Hi20240217的博客 1737

Android进阶——源码分析之图片加载框架Glide

前言 源码阅读不是一件简单的事情,每次都要花费很长时间来梳理其内部的原理,所以有朋友觉得看一遍看不懂,那很正常,接下来就是考验你耐心的时候。学习源码的目的是:学习它好的地方,吸收起来作为我们项目的开发。作为你想进阶成跟别人有优势的程序员,那么阅读代码是你的基本功,懂得提取别人优秀的代码,进行修改成为你的代码,那就是你牛逼的地方,所以还是静下心来看看源代码吧。当然,阅读代码也不要做到只见树木,不见

点击置顶文章查看博客目录(全站式导航) 1103

告别Mac自带终端:iTerm2 + Oh My Zsh 保姆级配置指南(含国内镜像源)

本文提供了一份详细的Mac终端优化指南,涵盖iTerm2、Oh My Zsh和Homebrew的配置流程,特别针对国内用户提供镜像源解决方案。通过安装现代化工具链和优化配置,帮助开发者打造高效、美观的终端工作环境,提升日常开发效率。

weixin_42638178的博客 398

大模型系列——Ollama简明教程

在这篇文章中,我们将了解如何使用 Ollama、如何在 Ollama 中创建自己的模型 以及如何使用 Ollama 构建聊天机器人。这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解——

2401_84052244的博客 1万+

Android图片加载与处理:Glide、Coil与最佳实践

图片加载是Android开发中一个看似简单却深藏玄机的领域。善用现代化的图片加载库,可以为你规避掉大量的性能问题,让你的应用如丝般顺滑。

m0_65382359的博客 1401

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 409

android 优秀框架整理,2021年我们程序员该如何进阶和规划

github:https://github.com/JakeWharton/butterknife 作者:JakeWharton ,也是square团队成员之一 使用: dependencies { compile ‘com.jakewharton:butterknife:8.6.0’ annotationProcessor ‘com.jakewharton:butterknife-compiler:8.6.0’ } 4.MPAndroidChart 一句话介绍:MPAndroidChart是一款图表框架

m0_66145114的博客 7254

AMD SDP 优快云 系列文章设计

摘要 本文档规划了7篇AMD SDP协议解析系列文章的技术博客设计方案。基于《Scalable Data Port (SDP) Specification》1.5.0版本(122页),面向SoC/NoC领域的RTL设计与验证工程师,构建从基础概念到验证实现的知识体系。 系列文章严格遵循协议规范边界,采用五类证据标签区分内容来源(规范原文、勘误、验证推导等),禁止补充未定义的实现细节。包含端口控制、事务传输、一致性协议等核心内容,最终落实到验证平台设计与覆盖率模型。 每篇文章采用统一模板:明确规范依据、问题导

元直的博客 163

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

图片加载框架Glide

图片加载框架Glide

似霰的博客 1912

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 图片加载框架:Picasso vs Glide

在 Android 开发中,图片加载是移动应用的核心功能之一。合理选择图片加载框架不仅能提升用户体验,还能优化内存管理和应用性能。本文将深入对比 Picasso 和 Glide 两大主流框架,结合代码示例分析它们的差异、工作原理及优化策略。从上述代码可以看出,二者基本的图片加载方式都是链式调用,语法较为相似。Picasso 只缓存全尺寸图片,以下是简单使用示例。Glide 支持按尺寸缓存,并且可以自定义缓存策略。表示同时缓存原始图片和处理后的图片。获取实例,Glide 使用。在上述 Glide 代码中,

2301_80329517的博客 1737

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

图片加载框架Glide解析

Glide是一个高效、开源、 Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。近日,Glide 3.0发布,现已提供jar包下载,同时还支持使用Gradle以及Maven进行构建。该版本包括很多值得关注的新功能,如支持G

u011228356的专栏 4万+

Android图片加载框架最全解析(一),Glide的基本用法

转载请注明出处:http://blog.youkuaiyun.com/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后

郭霖的专栏 20万+

图片加载之Glide使用

Glide的基本用法

一花一世界的博客 2万+
上一篇: 【Android 基础】ViewPager&TabLayout使用简例
下一篇: 【Android 进阶】SVG 的使用以及绘制动画
吴威龙
博客等级 码龄12年 162粉丝 88原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值