Glide加载图片非常方便,使用也非常广泛,但是并不能直接支持webp动图。

可能很多人会使用Fresco来加载webp,但是对于已经使用Glide的项目,总感觉再使用Fresco有点冗余,如果能用Glide来加载webp那将非常方便。

而github上也确实存在webpdecoder这样一个库支持加载webp。

具体使用方式总结如下:

一、首先加入依赖

//Glide库//implementation 'com.github.bumptech.glide:glide:4.7.1'//supportimplementation 'com.github.bumptech.glide:glide:4.12.0'//androidxannotationProcessor "com.github.bumptech.glide:compiler:4.12.0"//androidx
//Glide支持webp动图的库implementation "com.github.zjupure:webpdecoder:2.0.4.12.0"

二、使用

使用方法跟Glide的使用非常相似

//webp动图
Transformation<Bitmap> transformation = new CenterInside();
Glide.with(mAnimView).load(R.drawable.webp_anim)//不是本地资源就改为url即可.optionalTransform(transformation).optionalTransform(WebpDrawable.class, new WebpDrawableTransformation(transformation)).into(mAnimView);

三、动画播放完成监听

关于动画播放完成的监听,网上也有做法是通过反射拿到webp每一帧动画的时间,再累加起来得到动画总时长,最后通过Handler的postDelay进行延迟作为动画播放结束的回调,这样想想就知道不是很精确,如果误差可以接受那就可以。

监听其实就是在资源加载成功的回调里面,对WebpDrawable进行监听,不过要注意webp的循环次数如果是无限循环,那将不会有结束回调,可以通过代码设置循环次数为有限的即可。

为什么我知道是通过WebpDrawable进行监听,因为我之前用过Fresco,它的监听大概这样:

animatedDrawable.setAnimationListener(...)

所以我猜到了。其实进去WebpDrawable类里面看看,就知道它其实也实现了这么个接口

而Animatable2Compat接口就有结束的接方法。

所以动画播放完成回调的做法如下,只不过在上面的做法加多一点代码而已:

//webp动图
Transformation<Bitmap> transformation = new CenterInside();
Glide.with(mAnimView).load(R.drawable.webp_anim)//不是本地资源就改为url即可.optionalTransform(transformation).optionalTransform(WebpDrawable.class, new WebpDrawableTransformation(transformation)).addListener(new RequestListener<Drawable>() {@Overridepublic boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {return false;}@Overridepublic boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {WebpDrawable webpDrawable = (WebpDrawable) resource;//需要设置为循环1次才会有onAnimationEnd回调webpDrawable.setLoopCount(1);webpDrawable.registerAnimationCallback(new Animatable2Compat.AnimationCallback() {@Overridepublic void onAnimationStart(Drawable drawable) {super.onAnimationStart(drawable);}@Overridepublic void onAnimationEnd(Drawable drawable) {super.onAnimationEnd(drawable);webpDrawable.unregisterAnimationCallback(this);}});return false;}}).into(mAnimView);

Glide加载webp动画及监听动画播放结束相关推荐

  1. Android Glide加载图片、网络监听、设置资源监听

    Glide加载图片.加载进度监听 前言 正文 一.项目配置 二.显示网络图片 三.添加设置资源监听 四.添加设置资源监听 五.添加加载进度条 六.封装工具类 七.源码 总结 前言   在日常开发中使用 ...

  2. android glide加载webp动画设置播放动画次数和监听动画播放完成

    需求 产品经理说:需要使用一系列的动画,我说没问题啊,用gif图不就好了吗?结果,设计师给了我一系列的webp动图.我能怎么办? 先是百度了一番,找到了一个播放webp动画的glide库,库地址是Gl ...

  3. 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本。该案例支持处理 js 的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常 error 状态、支持视频播放

    YCWebView 项目地址:yangchong211/YCWebView 简介: 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本.该案例支持处理 js 的交 ...

  4. Glide 加载webp动图

    前提 公司新需求要求视频封面加载动图,但是由于Gif上传的图片过大,所以为了节省开销,对图片进行了处理,最后给到客户端的是webp格式的图片链接. 1.验证webp格式的图片链接是否是动图,测试时,将 ...

  5. Electron加载网页失败,监听事件处理

    1. 问题提出 在使用electronjs打包桌面软件的时候,如果启动软件之后,网络不通的情况下,加载网页失败,会显示白屏,在此情况下需要对加载网页失败的事件进行处理 2. 处理手段 2.1 监听di ...

  6. 使用cdn来加速字体文件在前端的加载速度,并监听字体是否加载完成

    最近在个人网站butterpig中实现了个性印章的在线设计功能,里面目前一共实现了有八九种个性印章的样式,并且还有六七种网络开源商用的字体类型.具体效果可以访问:个性印章在线设计查看. 印章的设计,其 ...

  7. Playwright 模拟浏览器、模拟手机、忽略图片加载、等待、监听、操作事件

    Playwright 是微软开源的自动化UI测试工具,支持Chrome.Firefox.Edge等多种浏览器,兼容多种语言.多种操作系统. 安装 pip install pytest-playwrig ...

  8. JS_无法监听audio的ended事件,监听audio播放结束无效

    当你的audio标签里面有loop属性时 <audio id="music2" loop preload autoplay="autoplay">& ...

  9. Glide加载GIF

    glide加载gif时,怎么监听gif动画播放完成?   我想要在播放gif动画完成后 添加一些事件

最新文章

  1. 如何解决visual studio2017 install 下载安装极慢的问题
  2. bzoj4154[Ipsc2015]Generating Synergy
  3. postgre 查询注释_postgresql 获取所有表名、字段名、字段类型、注释
  4. Subversion 1.7 Eclipse integration in Ubuntu12(转载)
  5. python 中各种下划线的神操作:_、_xx、xx_、__xx__、_ _xx、_classname_ _xx
  6. 电子表格转换成数据库_创建数据库,将电子表格转换为关系数据库,第1部分...
  7. kafka 主动消费_Kafka核心API——Consumer消费者
  8. php 下拉菜单 不提交 选中的值,在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值...
  9. EDGE浏览器配合阿呆喵设置广告过滤
  10. (转)基本光照模型公式
  11. 【Vegas原创】巧用GridView ButtonField列
  12. WP开发笔记——页面传参
  13. HDU1715 大菲波数【大数】
  14. 74HC573锁存器
  15. 信号完整性(SI)概述
  16. C语言实现操作系统简单的P V操作
  17. 怎么用计算机截图快捷键,教您怎么使用电脑自带的截图快捷键
  18. c语言银行利率问题答案,c语言编程 银行利率问题
  19. ZOJ 3450 Doraemon's Railgun (DP·分组背包)
  20. 手机中毒变“肉鸡” 个人信息1元贱卖

热门文章

  1. LD3320语音识别模块分析
  2. FPGA——SPI总线控制flash(1)(含代码)
  3. 书终于出来了:《Unity3D平台AR与VR开发快速上手》
  4. 计算机优化英语课堂教学,巧用平板,让课堂不平凡———平板电脑在小学中年级段英语课堂教学中的应用...
  5. 时隙ALOHA(S-ALOHA)算法的实现及其性能分析
  6. 系统迁移后无法正常开机相关心得
  7. 吴恩达提出了著名的二八定律
  8. RedHat 5 环境下 DHCP配置详解。
  9. .*? 和 .*的区别
  10. HTTP(一)HTTP响应的过程