MAUI不支持动态启动页动画,其SplashScreen为静态,由各平台原生机制控制;真正的动画需在启动后用自定义SplashPage页面模拟实现。
MAUI 本身不支持传统意义上的“启动页动画”(比如动态 SVG、Lottie 或自定义动画),它的 SplashScreen 是静态的,由平台原生机制控制:Android 用 launch_screen.xml,iOS 用 LaunchScreen.storyboard,Windows 用 SplashScreen.png。真正的“动画效果”只能在应用启动后、首屏显示前,用 MAUI 页面模拟实现——也就是常说的「伪启动页」或「过渡页」。
MAUI 的 SplashScreen 实际上只是把各平台原生启动图配置封装了一层。它在 .NET 运行时加载完成前就已显示,此时 C# 代码尚未执行,无法触发动画。所以你看到的“启动画面”本质是操作系统绘制的一张图,不能动、不能交互、不能编程控制。
核心思路:让 App 启动后立刻跳转到一个全屏的 SplashPage.xaml,在里面用 Animation、VisualStateManager 或第三方库(如 Microsoft.Maui.Controls +
.ShapesRotateAnimation)做动画,完成后自动导航到主页面。
SplashPage.xaml,设置 Background="Black" 或匹配品牌色Image 或 Label 显示 Logo,加 Opacity="0" 初始隐藏OnAppearing() 中用 this.FadeTo(1, 300) 淡入,再用 ScaleTo(1.2, 200).ScaleTo(1, 150) 做弹性缩放Shell.Current.GoToAsync("//MainPage") 跳转App.xaml.cs 的 OnStart() 里确保首次启动走这个流程,避免重复显示虽然不能动画,但可以尽量让原生 SplashScreen 和你的 MAUI 模拟页无缝衔接:
Resources/drawable/launch_screen.xml 的背景色、Logo 大小/位置,和 SplashPage.xaml 完全一致Resources/Assets.xcassets/LaunchScreen.imageset/ 放和 MAUI 页面同尺寸、同透明度的 PNGPlatforms/Windows/App.xaml 中确认 SplashScreenImage 路径正确,图片分辨率适配不同缩放比(100%, 125%, 150%)如果需要复杂动画(比如加载进度、路径动画),可引入:
Microsoft.Maui.Controls.Compatibility + Lottie(需配合 CommunityToolkit.Maui.Views.LottieView)SkiaSharp.Views.Maui 自绘动画(适合高级定制,但开发成本高)Resources/Raw(Android)或 Resources(iOS/macOS),并确保构建操作设为 MauiAsset
基本上就这些。MAUI 启动页动画不是“打开开关就能动”,而是靠原生静态图 + MAUI 页面动画组合实现。关键在视觉连贯性和时机控制——让系统图闪一下就立刻接上你的动画页,用户根本察觉不到断层。