先下载一个gif图片,这里提供一个gif图片示例
在线GIF图片帧拆分工具 - UU在线工具 (uutool.cn)
使用这个网站将gif切成单张图片
创建一个Avalonia MVVM的项目,将图片copy进去
在项目文件中添加一下代码:
<ItemGroup>
<None Update="gif\*.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
修改App.axaml.cs
代码
public partial class App : Application
{
private static TrayIcon NotifyIcon;
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = new MainWindowViewModel(),
};
}
InitializeLogo();
base.OnFrameworkInitializationCompleted();
}
private static void InitializeLogo()
{
// 初始化Icon
NotifyIcon = new TrayIcon();
// 初始图片
var size = 1;
_ = Task.Run(async () =>
{
while (true)
{
// 添加托盘图标,
await Dispatcher.UIThread.InvokeAsync(() =>
{
using var stream =
File.OpenRead(Path.Combine(AppContext.BaseDirectory, "gif", $"{size++}.png"));
// 定义图片的总数,达到总数从1开始继续循环
if (size == 151)
{
size = 1;
}
return NotifyIcon.Icon =
new WindowIcon(stream);
});
// 修改动态渲染速度
await Task.Delay(40);
}
});
NotifyIcon.ToolTipText = "Logo动图测试";
NotifyIcon.IsVisible = true;
}
}
执行项目,效果如图
简单实现托盘动图,你也可以使用更好的图片,这个动图不太专业可能显示不太好看
来着token的分享