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

.NET MAUI从内部文件夹加载Lottie文件的问题求助

MAUI SkiaSharp加载本地Lottie JSON文件问题解决

问题根源

SkiaSharp.Extended.UI.Maui的SKFileLottieImageSource对本地文件路径的解析逻辑和Xamarin旧版Lottie库不同,直接传入绝对路径无法正确读取;另外异步操作时未切换到UI线程更新控件,也会导致加载失败。

可靠解决方案

方案1:异步读取JSON内容并通过SKJsonLottieImageSource加载

这是跨平台通用的最优方案,避免路径解析的平台差异:

if (File.Exists(imagePath))
{
    // 异步读取文件,避免阻塞UI线程
    var jsonContent = await File.ReadAllTextAsync(imagePath);
    
    // 必须在UI线程更新控件
    MainThread.BeginInvokeOnMainThread(() =>
    {
        animation_view.Source = new SKJsonLottieImageSource
        {
            Json = jsonContent
        };
    });
}

方案2:Android平台适配SKFileLottieImageSource路径

如果坚持使用文件路径加载,Android上需要转换为URI格式:

if (File.Exists(imagePath))
{
    var file = new Java.IO.File(imagePath);
    var fileUri = Android.Net.Uri.FromFile(file);
    
    MainThread.BeginInvokeOnMainThread(() =>
    {
        animation_view.Source = new SKFileLottieImageSource
        {
            File = fileUri.ToString()
        };
    });
}

额外优化建议

  • 线程规范:所有UI控件的属性更新必须在UI线程执行,之前的5秒延迟能生效本质是巧合让线程调度完成,并非合理方案。
  • iOS兼容:iOS本地文件路径规则和Android差异大,建议统一使用方案1跨平台加载,减少适配成本。
  • 着色器错误修复:下拉刷新时出现的着色器编译错误,可在刷新开始时将animation_view.Source设为null释放旧资源,刷新完成后再重新加载新的Lottie内容。

内容的提问来源于stack exchange,提问作者JSB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:29:48