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发送消息成功的状态码 privatestaticfinalintMESSAGE_SUCCESS=4424; //handler发送消息所携带的参数(持续时间) privateintduration; /** *加载开门Gif动图(只播放一次) *@paramview */ publicvoidloadGif(Viewview){ Glide.with(this) .load(R.drawable.opendoor) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .listener(newRequestListener(){ @Override publicbooleanonException(Exceptionarg0,Integerarg1, Target arg2,booleanarg3){ returnfalse; } @Override publicbooleanonResourceReady(GlideDrawableresource, Integermodel,Target target, booleanisFromMemoryCache,booleanisFirstResource){ //计算动画时长 GifDrawabledrawable=(GifDrawable)resource; GifDecoderdecoder=drawable.getDecoder(); for(inti=0;i 使用这种方式就可以完美的实现对GIF的控制,对我遇到的需求提供了良性支持!
总结
以上就是这篇文章的全部内容了,希望本文的内容对给位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。