用我们自己写的Player C# Avalonia 15- Animation- AnimationPlayerTest
AnimateRadialGradient.axaml代码
<Window xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Height="328" Width="302.4"x:Class="AvaloniaUI.AnimateRadialGradient"xmlns:local="using:AvaloniaUI"x:DataType="local:AnimateRadialGradient"Title="AnimateRadialGradient"><Window.Resources><SolidColorBrush x:Key="AnimatedColorBrush" Color="Blue"/><RadialGradientBrush x:Key="AnimatedBrush"RadiusX="100%"RadiusY="100%"GradientOrigin="50%,50%"><GradientStop Color="White" Offset="0"/><GradientStop Offset="1"><GradientStop.Color><Binding Path="Color" Source="{StaticResource AnimatedColorBrush}"/></GradientStop.Color></GradientStop></RadialGradientBrush></Window.Resources><Grid><Ellipse Fill="{StaticResource AnimatedBrush}"Margin="10"Stretch="Uniform" /></Grid> </Window>
AnimateRadialGradient.axaml.cs代码
using Avalonia; using Avalonia.Controls; using Avalonia.Media; using Shares.Avalonia; using System;namespace AvaloniaUI;public partial class AnimateRadialGradient : Window {private readonly AnimationPlayer animationPlayer = new AnimationPlayer();private readonly RadialGradientBrush radialBrush;private readonly SolidColorBrush solidBrush;public AnimateRadialGradient(){InitializeComponent();radialBrush = (RadialGradientBrush)Resources["AnimatedBrush"]!;solidBrush = (SolidColorBrush)Resources["AnimatedColorBrush"]!;animationPlayer.Duration = 5;animationPlayer.Loop = true;//动态修改径向渐变 GradientOriginanimationPlayer.At(0).PlayLocal(progress =>{// 在中心点绕圈double x = 0.5 + Math.Cos(progress * Math.PI * 2) * 0.3;double y = 0.5 + Math.Sin(progress * Math.PI * 2) * 0.3;radialBrush.GradientOrigin = new RelativePoint(x, y, RelativeUnit.Relative);});//动态修改纯色 SolidColorBrush 颜色animationPlayer.At(0).PlayLocal(progress =>{// 在蓝色与粉色之间渐变var startColor = Color.Parse("#FF1E90FF");var endColor = Color.Parse("#FFFF1493");byte r = (byte)(startColor.R + (endColor.R - startColor.R) * progress);byte g = (byte)(startColor.G + (endColor.G - startColor.G) * progress);byte b = (byte)(startColor.B + (endColor.B - startColor.B) * progress);solidBrush.Color = new Color(255, r, g, b);});animationPlayer.Start();} }
运行效果