You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:40:36