Xamarin.Forms中Lottie AnimationView切换源后二次点击无法播放问题排查
解决AnimationView切换动画源后第二次点击无法播放的问题
看起来你遇到的核心问题是切换动画源后没有正确初始化新的动画资源,导致第二次调用Play()时无法触发播放。让我帮你分析并修复这个问题:
问题根源
当你在OnFinish事件中切换Animation属性时,AnimationView并不会自动加载并准备新的动画文件。第一次播放结束后,控件处于"已完成"状态,此时直接调用Play()不会重新启动新的动画——因为新的动画还没被初始化。
修复方案
我们需要在切换动画源后手动准备新动画,同时优化点击事件的逻辑,确保每次点击都能正确触发播放:
- 修改
OnFinish事件,添加动画准备步骤
private void AnimationView_OnFinish(object sender, EventArgs e) { // 切换动画源 if (animationView.Animation == "play_to_pause.json") { animationView.Animation = "pause_to_play.json"; } else { animationView.Animation = "play_to_pause.json"; } // 关键:加载并准备新的动画资源 animationView.Prepare(); }
- 优化点击事件,确保动画能重新启动
有时候动画处于完成状态时,直接调用Play()不会生效,所以我们可以先重置状态再播放:
private void AnimationView_OnClick(object sender, EventArgs e) { // 如果动画正在播放,可选择暂停(根据你的需求调整) if (animationView.IsPlaying) { animationView.Pause(); return; } // 重置动画状态,确保从开头播放 animationView.Reset(); animationView.Play(); }
为什么这样有效?
Prepare()方法会让AnimationView重新加载新设置的动画文件,初始化动画的帧数据和状态,确保后续的Play()能正确触发。Reset()方法会将动画状态重置到初始帧,避免因之前的完成状态导致播放无响应。
这样调整后,你点击控件时就能循环触发"播放→切换暂停动画→点击播放暂停动画→切换播放动画"的完整流程了。
内容的提问来源于stack exchange,提问作者tamam programmer
相关产品推荐
相关产品推荐

