如何在Xamarin Forms C#中读取Lottie动画并解决不显示问题
解决Xamarin Forms中Lottie动画无法显示的问题
问题排查及修复步骤:
1. 确认嵌入式资源配置
首先检查LeafGameAnim.json文件的构建操作:
- 右键文件 → 属性 → 将「Build Action」设置为
Embedded Resource,这是嵌入式资源加载的必要前提。
2. 消除XAML与C#的加载逻辑冲突
你当前同时在XAML中指定AnimationSource="EmbeddedResource",又在C#中手动读取JSON设置动画,两种逻辑冲突会导致动画无法正常渲染,二选一即可:
方案一:纯XAML加载(推荐)
删除C#中的手动加载代码,直接在XAML中指定完整的嵌入式资源路径(命名空间+文件夹层级+文件名):
<forms:AnimationView x:Name="LeafGame_Anim" AnimationSource="Les.MyData.MyAnimation.LeafGameAnim.json" IsVisible="True" RepeatMode="Infinite" AutoPlay="True" />
方案二:纯C#手动加载
修改XAML,将AnimationSource设为None,避免自动加载逻辑干扰:
<forms:AnimationView x:Name="LeafGame_Anim" AnimationSource="None" IsVisible="True" RepeatMode="Infinite" AutoPlay="True" />
然后调整C#代码,增加资源有效性检查并确保动画启动:
var jsonFileName = "Les.MyData.MyAnimation.LeafGameAnim.json"; var assembly = typeof(MainPage).GetTypeInfo().Assembly; // 检查资源是否存在,若为空则打印所有可用资源排查路径问题 Stream stream = assembly.GetManifestResourceStream(jsonFileName); if (stream == null) { foreach (var res in assembly.GetManifestResourceNames()) { System.Diagnostics.Debug.WriteLine(res); } return; } using (var reader = new System.IO.StreamReader(stream)) { var json = reader.ReadToEnd(); LeafGame_Anim.SetAnimationFromJson(json); // 显式触发播放,避免AutoPlay因时机问题未生效 LeafGame_Anim.Play(); }
3. 验证资源路径正确性
如果stream始终为null,说明你填写的jsonFileName与实际嵌入式资源名称不匹配。通过assembly.GetManifestResourceNames()打印所有资源的完整名称,找到LeafGameAnim.json对应的正确路径后替换即可。
4. 确认NuGet包兼容性
检查你安装的Lottie NuGet包(通常为Com.Airbnb.Xamarin.Forms.Lottie)与当前Xamarin Forms版本是否兼容,版本不匹配也可能导致动画无法渲染。
内容的提问来源于stack exchange,提问作者hk77
相关产品推荐
相关产品推荐

