用我们自己写的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; //动态修改径向渐变 GradientOrigin animationPlayer.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(); } }
运行效果