news 2026/4/3 2:23:58

【Android】Glide的使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Android】Glide的使用

简介

是一个快速高效的Android开源媒体管理和图像加载框架,它将媒体解码、内存和磁盘缓存以及资源池封装到一个简单易用的界面中。

Glide支持拉取,解码和展示视频快照,图片和GIF动画。

**优点:**1.使用简单,并且支持多种图片格式,既可以获取网络资源又可以获取本地资源,不用处理网络请求、缓存、内存管理、图片解码等复杂逻辑;

2.性能优秀:自动管理 Bitmap 内存,防止内存溢出,可以自动根据ImageView调整图片大小,节省内存。

所需权限

网络加载

通过网络连接加载图像,需要添加INTERNETACCESS_NETWORK_STATE权限

<manifest>...<uses-permissionandroid:name="android.permission.INTERNET"/><!--允许Glide监视连接状态--><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>...</manifest>

本地存储

要从DCIM或图片等本地文件夹加载图像,需要添加READ_EXTERNAL_STORAGE权限

<manifest>...<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>...</manifest>

要将Glide的缓存存储到公共sdcard上,需要使用WRITE_EXTERNAL_STORAGE权限

<manifest>...<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>...</manifest>

基本用法

在build.gradle中添加依赖

implementation'com.github.bumptech.glide:glide:4.12.0'
  • **with(Context context)**可以传递Activity/Fragment,并且它会和所传参数的生命周期进行绑定
  • **load(String imageUrl)**加载图片,传入的是图片的URL地址
  • placeholder占位符是在请求正在进行时,显示的图片
  • error表示请求失败时,会显示设置的图片
  • fallback表示传递的是null值时,会显示设置的图片
  • into(ImageView targetImageView)传入要展示图片的控件
  • transform用来完成剪裁(切圆)或对位图应用过滤器,但它也可以用于转换GIF动画,甚至自定义的资源类型
  • override将图片大小调整为给定的尺寸(以像素为单位),调整大小不考虑纵横比
  • transition控制图片加载完成后的过渡动画效果

简单使用

加载图片

Uriuri=Uri.parse("https://th.bing.com/th/id/R.c0b37497ff48b914ae99c7dcdcf7b95d?rik=HUXUOfyLgw7hHA&pid=ImgRaw&r=0");//加载网络图片Glide.with(this).load(uri).into(imageView);//应用资源Glide.with(this).load(R.drawable.image1).into(imageView);//加载圆形图片Glide.with(this).load(uri).circleCrop().into(imageView);//增加占位符和加载失败显示图片Glide.with(this).load(uri).placeholder(R.drawable.image1).error(R.drawable.image1).fallback(R.drawable.image1).into(imageView);//图片大小调整Glide.with(this).load(uri).override(600,200).into(imageView);

缩放图片

对于任何图像的任何处理,调整图像的大小可能会扭曲长宽比,丑化图片的显示。

Glide提供了变换去处理图片显示

  • centerCrop():会缩放图片,让图片充满整个ImageView的边框,然后裁掉超出的部分,ImageView会被完全填充满,但是图片可能不能完全显示
  • fitCenter():会缩放图片让两边都相等或小于ImageView的所需求的边框,图片会被完整显示但可能不会填满整个ImageView
Glide.with(this).load(uri).override(600,200).centerCrop().into(imageView);Glide.with(this).load(uri).override(600,200).fitCenter().into(imageView);

图片过渡

使用crossfade动画可以使改变图片的效果变得更加平滑

Glide.with(this).load(uri).placeholder(R.drawable.image1).error(R.drawable.image1).transition(DrawableTransitionOptions.withCrossFade())//withCrossFade(int duration)方法可以传入时间,默认时间是300毫秒.into(imageView);

除此之外,Glide还支持xml中自定义的动画文件

Glide.with(this).load(uri).transition(GenericTransitionOptions.with(R.anim.zoom_in)).into(imageView);

加载gif

StringgifUrl="https://i-blog.csdnimg.cn/blog_migrate/c0a5b53d30d8e1c25ea014b113b66fdf.gif";Glide.with(this).load(gifUrl).into(imageView);

还可以使用asGif()强迫生成一个gif

Glide.with(this).asGif().load(gifUrl).error(R.drawable.image1).into(imageView);

如果只想显示gif的第一帧图片,可以调用asBitmap()将其作为常规图片显示

Glide.with(this).asBitmap().load(gifUrl).into(imageView);

显示本地视频缩略图

StringfilePath="/storage/emulated/0/Pictures/targetVideo.mp4";Glide.with(this).asBitmap().load(Uri.fromFile(newFile(filePath))).into(imageView);

取消加载

Glide.with(this).clear(imageView);

注意:及时取消加载不是必须的操作,实际上,当Glide.with()中传入的Activity或Fragment实例销毁时,Glide会自动取消加载并回收资源。

高斯模糊

使用库

implementation'jp.wasabeef:glide-transformations:4.3.0'

简单使用

publicstaticvoidloadImageViewTransform(Contextmcontext,byte[]path,ImageViewimageView){//前一个参数为圆角,后一个为模糊值,越大越模糊BlurTransformationblurTransformation=newBlurTransformation(10,15);Glide.with(mcontext).load(path).apply(RequestOptions.bitmapTransform(blurTransformation)).into(imageView);}

组合使用

高斯模糊可以和各种效果组合

@GlideOptionpublicstaticBaseRequestOptions<?>applyBlurHead(BaseRequestOptions<?>options,intsize){//高斯模糊BlurTransformationblurTransformation=newBlurTransformation(20,1);//高斯模糊和切圆组合returnoptions.override(size).placeholder(R.drawable.image1).error(R.drawable.ic_launcher_background).transform(newMultiTransformation<>(blurTransformation,newCircleCrop()));}

注意:默认情况下,对每一个后续呼叫transform()或任何特定的transform方法(fitCenter(),centerCrop(),bitmapTransform()等)将取代先前的transform。

要将多个转换应用于单个加载,可使用MultiTransformation

自定义API

可以通过Glide提供的注解,来添加自己定义的API

  • GlideModule注解用于AppGlideModule

  • GlideExtension注解用于表示一个扩展Glide API的类,任何拓展的Glide API的类都必须使用这个注解来标记,被@GlideExtension注解的类以工具类的方式实现

    被@GlideExtension注解的类有两种扩展方式:

    • GlideOption-注解为RequestOptions添加一个选项
    • GlideType-添加新的资源类型的支持(GIF,SVG等)

首先添加Glide注解处理器配置

annotationProcessor "com.github.bumptech.glide:compiler:4.12.0"

项目需要通过GlideModule注解继承子AppGlideModule类的子类,并通过GlideExtension注解到工具类上来扩展自定义GlideAPI。

使用GlideOption和GlideType注解的方法必须为静态方法,经过Rebuild Project之后,最后会被编译到XXXRequest.java类

//Application模块内,GlideModule注解自定义子类继承AppGlideModule,可以不用重写任何方法@GlideModule(glideName="GlideApp")publicclassMyGlideModuleextendsAppGlideModule{publicvoidapplyOptions(Contextcontext,GlideBuilderbuilder){//可以添加一些全局性的optionssuper.applyOptions(context,builder);}}@GlideExtensionpublicclassMyGlideExtensions{privateMyGlideExtensions(){}//GlideOption注解,添加自定义的Option@GlideOptionpublicstaticBaseRequestOptions<?>mMiniThunb(BaseRequestOptions<?>options,intsize){returnoptions.fitCenter().override(size);}privatestaticfinalRequestOptionsDECODE_TYPE_GIF=RequestOptions.decodeTypeOf(GifDrawable.class);//GlideType注解,添加自定义的资源类型@GlideType(GifDrawable.class)publicstaticRequestBuilder<GifDrawable>asMyGif(RequestBuilder<GifDrawable>requestBuilder){returnrequestBuilder.transition(newDrawableTransitionOptions())//设置用于在加载完成时从占位符到正常显示的过渡效果.apply(DECODE_TYPE_GIF);// 将自定义的ResourceClass设置到resourceClass参数}}//使用自定义APIGlideApp.with(this).asMyGif()//使用自定义的资源.load(gifUrl).mMiniThunb(600)//使用自定义的Option.into(imageView);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 3:40:53

elk架构

文章目录 前言一、ELK架构概念1.1 ELK组成与原理1.2 Elasticsearch1.2.1 核心功能1.2.2 架构与组件1.2.3 使用场景1.2.4 Elasticsearch特点与缺点 3、Logstash介绍3.1 主要特点1.4 Kiabana 介绍 二、ELK部署实操2.1 环境配置2.2 Elasticsearch部署2.2.1 安装Elasticsearch2.2.2…

作者头像 李华
网站建设 2026/3/27 7:55:21

Qt/C++ 实现文件双向传输:从客户端到服务端,再从服务端到客户端

Qt/cpp实现的客户端往服务端传输文件、服务端往客户端传输文件&#xff0c;可监测传输状态&#xff0c;可控制传输。 源码&#xff1a; 使用Qt5.6.1_MinGW编译通过。c.37在很多网络应用场景中&#xff0c;文件的双向传输&#xff0c;也就是客户端往服务端传输文件以及服务端往客…

作者头像 李华
网站建设 2026/4/2 17:02:28

华强北看了都慌!酷铂达平替千元耳机,降噪+环绕声双buff拉满

作为常年蹲手游的数码党&#xff0c;早就看透了行业套路——华强北耳机降噪全靠“糊声音”&#xff0c;千元旗舰又性价比太低&#xff0c;直到遇到酷铂达&#xff0c;才发现百元价位也能拿下降噪环绕声双buff&#xff0c;音效细节堪比越级配置&#xff0c;手游体验直接原地升级…

作者头像 李华
网站建设 2026/3/26 1:35:21

计算机毕业设计springboot星宝民宿管理系统 基于 SpringBoot 的“云栖”民宿运营平台设计与实现 SpringBoot 驱动的“悠住”乡村民宿智慧管理系统

计算机毕业设计springboot星宝民宿管理系统0h27ep0g &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 当旅游从“到此一游”变成“住下来体验”&#xff0c;民宿就成了主角。然而…

作者头像 李华
网站建设 2026/4/1 4:03:04

优化Sigmoid函数计算:提升AI模型训练速度

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 编写一个Python脚本&#xff0c;比较原始Sigmoid函数和优化后的Sigmoid函数&#xff08;如分段线性近似或查表法&#xff09;的计算效率。包括时间复杂度和实际运行时间的对比&…

作者头像 李华
网站建设 2026/4/2 1:23:25

1小时打造Graph RAG原型:企业知识管理实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个极简企业知识管理原型&#xff0c;功能包括&#xff1a;1. 上传公司文档自动构建知识图谱 2. 自然语言问答接口 3. 知识关联可视化。要求&#xff1a;使用预训练模型减少开…

作者头像 李华