有时候要在动画效果播放结束后执行某种操作,自己写动画的话比较好操作,只是动画比较复杂,所以这里使用Gif进行控制,然而在网上搜索Gif时候发现关于Gif的加载监听代码都过时了,在新版本中是没法使用的,所以这里根据官网文档以及源码进行整理了新的使用方式。该方式应该只适用于Glide4.9以上版本。代码如下:
/**
* 加载开门Gif动图(只播放一次)
* @param view
*/
private var gifDrawable : GifDrawable ?= null //gif动画
private fun loadGif(view: ImageView) {
GlideApp.with(this)
.asGif()
.load(R.mipmap.gold_anim)
.addListener(object :RequestListener<GifDrawable>{
override fun onLoadFailed(e: GlideException?, model: Any?, target: com.bumptech.glide.request.target.Target<GifDrawable>?, isFirstResource: Boolean): Boolean {
e?.printStackTrace()
return true
}
override fun onResourceReady(resource: GifDrawable, model: Any?, target: com.bumptech.glide.request.target.Target<GifDrawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
gifDrawable = resource
resource.setLoopCount(1)
return false
}
})
.into(view)
}
private fun startGoldGif(){
gifDrawable?.setLoopCount(1)
gifDrawable?.registerAnimationCallback(object : Animatable2Compat.AnimationCallback() {
override fun onAnimationStart(drawable: Drawable?) {
super.onAnimationStart(drawable)
}
override fun onAnimationEnd(drawable: Drawable?) {
super.onAnimationEnd(drawable)
gifDrawable?.unregisterAnimationCallback(this)
//动画播放结束
}
})
gifDrawable?.start()
}
注意:
这个加载完会默认播放一次(该次数和设置的循环次数有关,但是最少一次)。所以当实现点击播放的效果时候可以预设一张同样的静态图片(或者从GifDrawable
中获取),在点击前进行隐藏Gif效果,点击时候展示Gif效果。
参考链接:
Glide官网文档: https://muyangmin.github.io/glide-docs-cn/doc/generatedapi.html