Closed IamPlato closed 2 months ago
请在重新打开前提供具体的示例代码.
如下代码,我希望能点击进行动效的切换,同时每个动效播完后能自动进行默认动效的播放。结果发现开始和结束的回调方法会执行两次:
//每次点击执行doAction(),进行动效的切换
private fun doAction(
apng: APNGDrawable?,
loopLimit: Int = 1,
) {
mApngDrawable?.clearAnimationCallbacks()
mApngDrawable?.stop()
val callback = object : Animatable2Compat.AnimationCallback() {
override fun onAnimationStart(drawable: Drawable?) {
super.onAnimationStart(drawable)
Logs.i(TAG, "onAnimationStart")
}
override fun onAnimationEnd(drawable: Drawable?) {
super.onAnimationEnd(drawable)
Logs.i(TAG, "onAnimationEnd")
doNormalAction()//每个动效播完后能自动进行默认动效的播放
}
}
apng!!.registerAnimationCallback(callback)
apng.setLoopLimit(loopLimit)
mBinding.ivPpmt.setImageDrawable(apng)
apng.start()
mApngDrawable = apng
}
//执行默认的动效
private fun doNormalAction() {
Logs.i(TAG, "ppmt:play normal anim...")
val currentAvatar = AvatarSettings.getCurrentAvatar()
val apng =APNGDrawable.fromFile("sdcard/wt_avatar/${currentAvatar}/wt_aispace/${normalAction.first}")
apng!!.setLoopLimit(-1)
mBinding.ivPpmt.setImageDrawable(apng)
apng.start()
mApngDrawable = apng
}
日志如下,几乎无规律
如果手动start和stop的话请关闭自动播放:apngDrawable.setAutoPlay(false)
如果手动start和stop的话请关闭自动播放:apngDrawable.setAutoPlay(false)
666.太感谢了
当点击进行动效切换是,注册的监听的onAnimationStart和onAnimationEnd执行的并不准确