看我一行代码起飞,Glide加载gif优化实践

Glide-加载Gif 前言:这一节我们将讲到Glide如何加载gif图(我最开始使用的图片框架其实是Imagerloader和Picasso,但是他们都不支持gif的加载,所以后来我才开始尝试使用Glide,慢慢的发现Glide许多的强大功能)Glide 系列目录 1.Glide-入门教程 2.Glide-占位图以及加载动画 3.Glide-加载本地图片 4.Glide-加载Gif 1.简单加载如果只是简单加载gif,其 阅读详情

在这里插入图片描述

前言

最近项目中有使用到gif动画,加上本身已经引入了Glide (支持gif)库,所以便用Glide来加载了;但在使用过程中还是遇到了不少困难, 在此记录下,希望可以给遇到类似问题的你一些思考和建议。

img

一、Glide加载gif

1.在项目中添加依赖

dependencies {
 compile 'com.github.bumptech.glide:glide:4.0.0'
 compile 'com.android.support:support-v4:25.3.1'
}

Glide需要依赖Support Library v4

2.加载图片

// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
 ...
 ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

 Glide.with(this)
.load("http://goo.gl/gEgYUd")
.into(imageView);
}
// For a simple image list:
@Override public View getView(int position, View recycled, ViewGroup container) {
 final ImageView myImageView;
 if (recycled == null) {
 myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
 } else {
 myImageView = (ImageView) recycled;
 }

 String url = myUrls.get(position);

 Glide
 .with(myFragment)
 .load(url)
 .centerCrop()
 .placeholder(R.drawable.loading_spinner)
 .into(myImageView);

 return myImageView;
}
//不使用它的默认动画
Glide.with(mContext)
 .load(url) 
 .dontAnimate()
 .placeholder(R.drawable.loading_spinner)
 .into(circleImageview);

提示:不要再非主线程里面使用Glide加载图片,如果真的使用了,请把context参数换成getApplicationContext

3.加载GIF

如果只是简单加载gif,其实跟加载普通图片一样

Glide.with(this).load(mGifUrl).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

如果希望加载gif时只加载gif的第一帧,把gif当作普通图片一样加载,那么只需要加上asBitmap方法即可

Glide.with(this).load(mGifUrl).asBitmap().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

如果你希望加载的只是gif,如果不是gif就显示错误图片,那么只用加上asGif方法即可

 Glide.with(this).load(mGifUrl).asGif().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

网络上很多文章上都是从一篇译文里面拷贝过来的,里面说Glide可以加载本地视频,但是那篇译文漏翻译一句了,Glide只会加载本地视频的第一帧,也就是缩略图,而且其实加载缩略图的时候也无需转化为Uri,直接把File丢进去就行了

 mVideoFile = new File(Environment.getExternalStorageDirectory(), "xiayu.mp4");

 Glide.with(this).load(mVideoFile).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

在大多数情况下,当你使用diskCacheStrategy(DiskCacheStrategy.SOURCE)时,Gif的加载速度会显着提高(其实就是把gif资源缓存到磁盘)->可以解决gif加载慢或加载不出来的情况(NONE是不缓存数据,SOURCE是缓存原型,原图)

Glide.with(this).load(mGifUrl).diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.mipmap.place)
.error(R.mipmap.icon_photo_error)
.into(mIv);

动态显示gif图的次数,比如我想显示一次gif就停止

Glide.with(this).load("url").diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(new GlideDrawableImageViewTarget(iv, 1)); 

这里的GlideDrawableImageViewTarget(ImageView view, int maxLoopCount)这个方法,maxloopCount可以控制显示次数。

img

二、Glide加载gif优化

1.解决Glide加载Gif非常慢问题

 Glide.with(MainActivity.this).load(url).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView); 

为其添加缓存策略,其中缓存策略可以为:Source及None,None及为不缓存,Source缓存原型.如果为ALL和Result就不行

2.加载第一贞:

Glide.with(context).load(gifUrl).asBitmap().into(imageViewGifAsBitmap);

3.控制动画次数:

Glide.with(this).load(getResource()).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(new GlideDrawableImageViewTarget(imageView, 1));

4.GIF 时间:

Glide.with(FirstActivity.this)

.load(file)

.asGif()

.fitCenter()

.diskCacheStrategy(DiskCacheStrategy.SOURCE)

.listener(new RequestListener<File, GifDrawable>() {

@Override

public boolean onException(Exception e, File model, Target<GifDrawable> target, boolean isFirstResource) {

return false;

}

@Override

public boolean onResourceReady(final GifDrawable resource, File model, Target<GifDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {

new Thread(new Runnable() {

@Override

public void run() {

int duration = 0;

try {

GifDrawable gifDrawable = (GifDrawable) resource;

GifDecoder decoder = gifDrawable.getDecoder();

for (int i = 0; i < gifDrawable.getFrameCount(); i++) {

duration += decoder.getDelay(i);

}

mGifAdTime = duration;

} catch (Throwable e) {

}

}

}).start();

return false;

}

})

.into(mAdImg);

更多Android进阶指南 可以扫码 解锁 《Android十大板块文档》

1.Android车载应用开发系统学习指南(附项目实战)

2.Android Framework学习指南,助力成为系统级开发高手

3.2023最新Android中高级面试题汇总+解析,告别零offer

4.企业级Android音视频开发学习路线+项目实战(附源码)

5.Android Jetpack从入门到精通,构建高质量UI界面

6.Flutter技术解析与实战,跨平台首要之选

7.Kotlin从入门到实战,全方面提升架构基础

8.高级Android插件化与组件化(含实战教程和源码)

9.Android 性能优化实战+360°全方面性能调优

10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔

Glide加载Gif的卡顿优化思路分析 其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。【Android思维脑图(技能树)】知识不体系? 阅读详情

相关推荐

Android之用glide加载gif图片静态展示

1 问题 图片是gif动图,我们需要获取第一帧的静态图片并且展示。 2 解决办法 public void changeGifToPicture(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) { Glide.with(context) ...

码莎拉蒂 5908

Android 加载gif图,Glide

在上面的代码中,我们首先使用 `Movie.decodeStream()` 方法加载 GIF 图片,然后设置 ImageView 的宽高为 GIF 图片的宽高。最后,在 `onDraw()` 方法中,我们使用 `Movie.draw()` 方法将 GIF 图片绘制到 Canvas 上。其中,placeholder 和 error 是占位图和错误图,override 是设置图片的大小,centerCrop 是设置图片的缩放类型。其中,R.drawable.gif_image 是 gif 图片的资源 id。

YDHIT的博客 3835

优化Glide加载大型GIF图

在本文中,我们将探讨如何优化Glide加载超大GIF图像的问题,并提供相应的源代码示例。为了解决这个问题,我们可以使用Glide的asBitmap()方法,将GIF图像作为静态图片加载。综上所述,通过使用Glide的asBitmap()方法、控制缓存策略和压缩GIF图像尺寸,我们可以优化Glide加载超大GIF图像的性能。为了优化Glide加载超大GIF图像的性能,我们可以使用skipMemoryCache()方法来禁用内存缓存,并使用diskCacheStrategy()方法来控制磁盘缓存策略。

HackDashX的博客 376

Android基于Glide(4.6.1)加载gif实践

1.Glide是什么? Glide是一个面向Android的快速高效的开源媒体管理和图像加载框架,它将媒体解码、内存和磁盘缓存以及资源池封装到一个简单易用的接口中; Glide支持获取、解码和显示视频静像、图像和动画GIF。Glide包括一个灵活的API,允许开发人员插入几乎任何网络堆栈。默认情况下,Glide使用自定义的基于HttpUrlConnection的堆栈,但也包括插件到Google的Volley项目或Square的OkHttp库中的实用程序库。 Glide的主要重点是尽可能平滑和快速地滚动

Tiger的专栏 9758

【强化学习】11 —— Double DQN算法与Dueling DQN算法

可以看到由于数据点的分布,使得拟合出的价值函数无法与真实的价值函数吻合,甚至在部分区域产生了明显的偏差。Dueling DQN 是 DQN 另一种的改进算法,它在传统 DQN 的基础上只进行了微小的改动,但却能大幅提升 DQN 的表现。这样,即使其中一套神经网络的某个动作存在比较严重的过高估计问题,由于另一套神经网络的存在,这个动作最终使用的值不会存在很大的过高估计问题。.在同一个状态下,所有动作的优势值之和为 0,因为所有动作的动作价值的期望就是这个状态的状态价值。环境的状态包括倒立摆角度的正弦值。

sinat_52032317的博客 1万+

战舰V3移植CANopenNode并驱动电机全流程

第三部分是电机的对象字典(也就是节点的OD)中的索引,长度2个字节。索引发送的是小段模式,比如这一部分为0X40 0X60,实际操作的索引地址为0X6040。第一部分是COB-ID,长度1个字节,电机的node-ID默认为0x01,所以报文ID一直是601。第五部分是要写入的数据,数据发送的时候是小端模式,低字节数据先发送,长度由第二部分决定。配置定时器6,时间为1ms,根据公式计算得到参数PSC取72-1,ARR取1000-1。第二部分是CMD,长度1个字节,其实就是数据部分的长度,

qq_50526837的博客 3045

{Android}一行代码起飞,Glide加载gif优化实践

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

2401_84412521的博客 741

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

LSTM 通过独特的门控机制解决了传统 RNN 的梯度消失和梯度爆炸问题,使其在处理长序列时具有显著优势。随着技术的不断发展,LSTM 及其变种(如 Bi-directional LSTM、Stacked LSTM 等)有望在更复杂的任务中发挥重要作用。2. **可视化真实值和预测值**:通过绘图来比较真实值和预测值,判断模型的准确性。2. **输入门(Input gate)**:决定当前的输入信息对细胞状态的影响。1. **细胞状态(Cell state)**:保持信息在时间步之间的传递。

qq_45441438的博客 2056

{Android}一行代码起飞,我的移动开发春季历程

// For a simple image list: @Override public View getView(int position, View recycled, ViewGroup container) { final ImageView myImageView; if (recycled == null) { myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false); } else

m0_66685270的博客 150

【Ultrascale+ MPSOC学习记录】10、PS端以太网使用lwip

还是参考ALINX教程,学习PS端以太网如何使用,从教程中可以看到,开发板使用了一个xilinx默认不支持的phy JL2121,所以需要修改lwip的库源码。

ryo891012的博客 881

Educoder:爬虫实战——求是网周刊文章爬取

第1关:获取新闻url importrequests importre defgeturls(): #**********Begin**********# url='http://www.qstheory.cn/dukan/qs/2014/2019-01/01/c_1123924172.htm' headers={ 'User-Agent':'Mozilla/5.0(Linux;Android6.0;Nexus5Buil...

weixin_46026136的博客 5254

一次违反常规的安卓大厂面试经历,附小技巧

2021年1月4日,我终于结束了这两个月以来收到的最好的一个公司的视频面试,短短15分钟,我们双方就再无话题了。我是觉得我不够优秀,配不上这个岗位。面试官可能觉得已经看透我了。 让我回顾一下这稍纵即逝的15分钟: 提前2分钟,面试官到达视频现场并友好提示我们开始,先做个自我介绍。 我一开始就很紧张,自我介绍说的一塌糊涂,毫无重点。但面试官很友好,一直跟我点头互动,认真听我不知所云的自我介绍。我很愧疚自责:我浪费了人家的时间。 然后面试官问我是否在找新的工作机会。我说是的,我很想要上班,看到大家在字节上班都很

m0_57079235的博客 306

Git下载与安装

一、Git下载 二、Git安装

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 6万+

【Android笔记】Android 图像加载:使用 Glide 加载 GIF、序列帧及多种图片格式全解析

本文将系统讲解如何在 Android 项目中使用 Glide 高效加载多种格式的图像资源,包括静态图、GIF 动图、序列帧图像等,同时解析各类资源的适用场景、性能优化策略与常见问题排查。

一个XR(AR|VR|MR)程序猿的博客(EQ-雪梨蛋花汤) 2239

4.4 直流无刷电机(BLDC):控制器硬件设计

摘要 本文详细阐述了直流无刷电机(BLDC)控制器的硬件设计要点。控制器硬件主要包括微处理器单元、功率驱动模块、信号检测电路、通信接口和电源管理模块。在微处理器选型方面,分析了ARM Cortex-M系列、DSP等架构的适用场景,并对比了不同处理器的性能参数。功率驱动模块设计重点包括栅极驱动电路、逆变桥热管理和电流保护机制。信号检测部分介绍了位置传感器接口和模拟信号调理技术。此外,还讨论了通信接口设计、电源管理方案以及硬件布局与EMC设计规范。最后强调了硬件测试验证的重要性,包括故障注入测试等验证方法。整体

技术工作者 185

基于模型上下文协议(MCP)的可插拔式临床AI工具链Clinical DS研究(下)

本研究深入探讨了医疗AI在临床落地中的核心矛盾,即如何从“模型能答”迈向“系统可信、可用、可追溯”。为解决此矛盾,我们创新性地提出并详细设计实现了一套基于模型上下文协议(MCP)的**“可插拔式临床AI工具链”**架构。通过将复杂的医疗AI系统解构为Host、MCP Server和标准协议三层,并将各类能力(临床决策、影像分析、合规审计)封装为标准的、可独立演进的Server,我们成功地构建了一个模块化、高内聚、低耦合的系统。

AllenLV的博客 1380

Android开发——优化Glide加载超大gif图,零基础学android开发

一加1手机android6.0,加载6张2-5mb的gif图How要优化首先要了解gif的特性,已经glide如何渲染gif的。由于源码的剖析过程非常长,都可以单独出个文章了。gif文件的文件头前3个字节必然为 ‘G’ ‘I’ ‘F’gif中的每一帧尺寸相同gif中每帧会有间隔时间检测资源是否为gif为最终渲染gif的drawable把流转换为把转换为File以上组件模块在的构造方法内进行注册组装。

weixin_57485542的博客 1434

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Glide加载gif遇到的几个坑

我通过setLoopCount(1)方法将gif的播放次数设置为1,即播放一次停止播放(不设置的话默认则会连续循环播放动画),但是会发现如果仅是这样设置,当with方法传递的context是当前Activity则会导致如果已经播放过一次动画,然后跳转到其他页面再回来,动画会自动再次播放...Glide本身支持gif格式的动画加载,但是大多数情况下我们用Glide都是去加载一些静态图片,加载gif动态图的需求不是很多,因此这次使用Glide加载gif就遇到了一些令人匪夷所思的问题。

qq_35298279的博客 1008

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android高工面试:用Glide加载Gif导致的卡顿,说一下你的优化思路

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。BAT大厂面试题、独家面试工具包,资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,

2401_84103616的博客 1142

Glide 加载webp动图实战(解决图片每帧间隔过长,动图单次播放,二次播放动图时首帧是动图最后一帧的问题)

零、前言 最近接了一个需求,要在某个地方加上动图的特效,最后方案确定下来有两种实现的方式 一、lottie动画来展示 二、类gif动图的方式来展示 考虑到时间的成本,优先使用类gif的方式来实现。 主要是原因第三方图片加载框架已经封装好了一套完整的图片展示的流程,包括图片下载,展示,回收,缓存等。我们直接进行调用即可,但是由于ui给出的动图是webp格式的,所以在使用过程中出现挺多棘手的问题,好在最后找到原因并解决。 一、具体的实现代码 添加...

just_hu的博客 1万+

原来Glide是这样加载GIF图的

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

2401_84122760的博客 1134
上一篇: 选择困难症的面试官也就只能是我了
下一篇: 程序员圈“内卷”这么严重,如何才能更进一步,进入大厂
Agent学习路线
博客等级 码龄6年 1万+粉丝 1904原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值