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

运行效果

image

 

posted on 2025-10-14 11:35  dalgleish  阅读(3)  评论(0)    收藏  举报