全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android中GIF动图的播放控制和监听详解

前言

最近接手的项目里涉及到了 GIF 动图的播放与监听,在上一版本中对于 GIF 的处理是由 H5 来实现的,因为考虑到用户体验,因此现在的需求是将这块儿原生化,途中差点误入歧途!下面来看看详细的介绍吧。

Android 中 GIF 动图处理与监听

刚开始第一个想到的便是 glide , 但是自认为 glide 不能够控制 GIF 以及去监听它,所以网上去搜寻别的方法。看到有一个方案是将图片分帧,一张张的去用逐帧动画来实现。

我开始怀疑给这个解决方案的人了,都什么时代了还做这种费力不讨好,大量占用用户内存的东西!于是乎动手前又仔细 Google 了一番,答案着实令我尴尬,glide 是可以控制 GIF 动画的!!!

怒上代码 :使用glide 加载 GIF 动图

Glide.with(DoorActivity.this).load(R.drawable.opendoor).into(openDoorGif);

很简单的一行代码就可以搞定,以上方式图片和动图都可以加载(网络链接亦可)

下面是只可以加载 GIF 动图的写法:

Glide.with(DoorActivity.this).load(R.drawable.opendoor).asGif().into(openDoorGif);

其实就多了个 asGIF

但是这种方式下的动图播放一直是循环的,有什么方式可以停下来呢!没遇到过千万别说没必要,假如现在有一个需求,需要点击一下按钮来播放一次 GIF 实现与用户的交互呢?这个技能我想你肯定是要 get 的,因为类似需求你迟早会碰到!

下面写法实现了对 GIF 动图的控制

//handler发送消息成功的状态码
private static final int MESSAGE_SUCCESS = 4424;
//handler发送消息所携带的参数(持续时间)
private int duration;

/**
 * 加载开门Gif动图(只播放一次)
 * @param view
 */
public void loadGif(View view){  
 Glide.with(this)
   .load(R.drawable.opendoor)
   .diskCacheStrategy(DiskCacheStrategy.SOURCE)
   .listener(new RequestListener<Integer, GlideDrawable>() {

    @Override
    public boolean onException(Exception arg0, Integer arg1,
     Target<GlideDrawable> arg2, boolean arg3) {
      return false;
     }

    @Override
    public boolean onResourceReady(GlideDrawable resource,
     Integer model, Target<GlideDrawable> target,
     boolean isFromMemoryCache, boolean isFirstResource) {
     // 计算动画时长
     GifDrawable drawable = (GifDrawable) resource;
     GifDecoder decoder = drawable.getDecoder();
     for (int i = 0; i < drawable.getFrameCount(); i++) {
      duration += decoder.getDelay(i);
     }
     //发送延时消息,通知动画结束
     //以下两个参数都是 int 型,记得如上的声明
     handler.sendEmptyMessageDelayed(MESSAGE_SUCCESS,
       duration);
      return false;
     }
    }) 
     //仅仅加载一次gif动画
     //此处的参数 1 及时指明播放次数
    .into(new GlideDrawableImageViewTarget(openDoorGif, 1)); 
}

使用这种方式就可以完美的实现对 GIF 的控制,对我遇到的需求提供了良性支持!

总结

以上就是这篇文章的全部内容了,希望本文的内容对给位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# android  # gif播放  # gif播放控件  # gif播放一次  # Android使用glide加载gif动画设置播放次数  # Android实现可播放GIF动画的ImageView  # Android中播放Gif动画取巧的办法  # android播放gif格式图片示例  # Android自定义View播放Gif动画的示例  # 加载  # 来实现  # 就可以  # 有一个  # 都是  # 发送消息  # 有什么  # 我想  # 对我  # 第一个  # 是由  # 误入歧途  # 上一  # 很简单  # 来看看  # 考虑到  # 人了  # 刚开始  # 这块  # 令我 


相关文章: 如何在阿里云ECS服务器部署织梦CMS网站?  Bpmn 2.0的XML文件怎么画流程图  高端智能建站公司优选:品牌定制与SEO优化一站式服务  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  如何快速搭建响应式可视化网站?  网站微信制作软件,如何制作微信链接?  如何快速查询网站的真实建站时间?  宝塔建站无法访问?如何排查配置与端口问题?  python的本地网站制作,如何创建本地站点?  建站之星在线版空间:自助建站+智能模板一键生成方案  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何做静态网页,sublimetext3.0制作静态网页?  如何用西部建站助手快速创建专业网站?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  宝塔新建站点报错如何解决?  建站之星代理商如何保障技术支持与售后服务?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  独立制作一个网站多少钱,建立网站需要花多少钱?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  潮流网站制作头像软件下载,适合母子的网名有哪些?  开源网站制作软件,开源网站什么意思?  建站主机与服务器功能差异如何区分?  建站之星如何助力网站排名飙升?揭秘高效技巧  韩国服务器如何优化跨境访问实现高效连接?  如何通过万网虚拟主机快速搭建网站?  建站之星安装后界面空白如何解决?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何在阿里云域名上完成建站全流程?  教学论文网站制作软件有哪些,写论文用什么软件 ?  简单实现Android验证码  小型网站建站如何选择虚拟主机?  网站制作公司,橙子建站是合法的吗?  网站制作公司排行榜,四大门户网站排名?  北京企业网站设计制作公司,北京铁路集团官方网站?  建站DNS解析失败?如何正确配置域名服务器?  已有域名和空间如何搭建网站?  音响网站制作视频教程,隆霸音响官方网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  建站主机选购指南与交易推荐:核心配置解析  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  建站OpenVZ教程与优化策略:配置指南与性能提升  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  焦点电影公司作品,电影焦点结局是什么?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  ,有什么在线背英语单词效率比较高的网站?  h5网站制作工具有哪些,h5页面制作工具有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。