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

感恩原创:http://code.replays.net/201706/92898.html
android下播放gif图片功能似乎并不常用,很多时候还是以展示静态图片为主,可能是由于gif图体积比较大吧。不过像表情动画什么的,可能还是需要gif图的。本文主要给大家介绍了关于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 的控制.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值