为了账号安全,请及时绑定邮箱和手机立即绑定

用Glide控制GIF动画

用Glide控制GIF动画

www说 2023-05-24 16:03:54
我正在使用Glide将动画 GIF 动画加载到ImageView. 它按预期工作,无限循环:GlideApp.with(getContext())             .load(R.raw.my_gif_animation)             .into(this)我想在每次 GIF 动画循环开始(或结束)时添加振动,但我找不到任何回调、侦听器或帧计数器,我可以用它们来了解动画循环何时开始(或结束)。欢迎在Java和中回答Kotlin。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

我找到了解决问题的方法,事实证明我们可以在资源加载后访问 GIF 动画的帧。在 running 中使用此信息Thread,我不仅能够听到动画的结束/开始,而且还能根据动画帧非常精确地调整时间。


这是我的工作代码Kotlin(其中Java非常相似):


GlideApp.with(getContext())

            .asGif()

            .load(R.raw. my_gif_animation)

            .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE))

            .listener(object : RequestListener<GifDrawable> {


                override fun onLoadFailed(

                    e: GlideException?,

                    model: Any,

                    target: Target<GifDrawable>,

                    isFirstResource: Boolean

                ): Boolean {

                    return false

                }


                override fun onResourceReady(

                    resource: GifDrawable?,

                    model: Any,

                    target: Target<GifDrawable>,

                    dataSource: DataSource,

                    isFirstResource: Boolean

                ): Boolean {

                    myThread = Thread(Runnable {

                        while (true) {

                            if (resource?.isRunning == true) {

                                if (resource.frameIndex == 10).toInt()) {

                                    // This code will be executed every time the 10th frame of the GIF animation is played.. 

                                }

                                if (Thread.interrupted()) break

                            }

                        }

                    })

                    myThread?.start()

                    return false

                }

            })

            .into(this)


查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信