用我们自己写的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();
}
}
运行效果

浙公网安备 33010602011771号