gpt4 book ai didi

c# - 使用正弦波动画圆的填充

转载 作者:太空狗 更新时间:2023-10-29 22:37:26 24 4
gpt4 key购买 nike

我正在尝试使用正弦波制作一个圆圈,使其充满动画。这是我制作的示例图片:

Example image.

所以黑色是圆圈,如您所见,它以类似正弦波的方式被切断。当正弦波在水平方向上“行进”并通过圆的全高 Y 值决定波的放置位置时,您能做到这一点吗? (让它看起来像圆圈中有水在顶部产生波浪并能够决定圆圈中有多少“水”)

有没有办法做到这一点?也许在某些地方可以阅读这些类型的动画?

需要注意的是,灰色背景代表透明度,因此圆圈的“切断”部分应该是透明的。

最佳答案

做这样的事情的主要特征是 OpacityMask .下面的示例使用 VisualBrush 设置为 Tile 作为蒙版,并使用画笔的变换属性来执行您描述的 Action 。

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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" mc:Ignorable="d" x:Class="WpfApplication1.MainWindow"
Title="MainWindow" Height="447" Width="569">
<Window.Resources>
<Storyboard x:Key="Wave">
<DoubleAnimation Storyboard.TargetProperty="(UIElement.OpacityMask).(Brush.RelativeTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="ellipse" RepeatBehavior="Forever" From="0" To="1" Duration="0:0:1" />
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource Wave}"/>
</EventTrigger>
</Window.Triggers>
<Canvas>
<Ellipse x:Name="ellipse" Fill="#FF82C6FF" Height="160" Canvas.Left="320" Canvas.Top="80" Width="160">
<Ellipse.OpacityMask>
<VisualBrush Visual="{Binding ElementName=wave}" TileMode="Tile" Viewport="0,-1,1,3" Stretch="None" >
<VisualBrush.RelativeTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform/>
<RotateTransform/>
<TranslateTransform Y="{Binding Value,ElementName=y}" />
</TransformGroup>
</VisualBrush.RelativeTransform>
</VisualBrush>
</Ellipse.OpacityMask>

</Ellipse>
<Grid x:Name="wave" Height="377" Canvas.Left="80" Canvas.Top="23" Width="160" Background="#00000000">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="{Binding Value,ElementName=amplitude}"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Path Fill="#FF82C6FF" Data="M12.5,1.6925709 C31.25,1.6925709 31.25,18.615654 50,18.615654 68.75,18.615654 68.75,1.6925709 87.5,1.6925709 87.499909,27.077196 87.5,27.077107 87.5,27.077107 63.28125,27.077136 12.5,27.077196 12.5,27.077196 12.5,27.077196 12.500094,27.077196 12.5,1.6925709 z" Stretch="Fill" Grid.Row="1"/>
<Rectangle Fill="#FF82C6FF" Grid.Row="2" Margin="0,-1,0,0" />
</Grid>
<Slider x:Name="y" Width="200" Minimum="-0.6" Maximum="1" Value="0"/>
<Slider x:Name="amplitude" Width="200" Minimum="1" Maximum="100" Value="20" Canvas.Top="23"/>
</Canvas>
</Window>

要隐藏蒙版,您可以将其直接放在 VisualBrush 中,而不是像上面那样进行绑定(bind)。您可能还想查看其他类型的画笔及其变换和视口(viewport)/视框。

更新:面具现在分为两部分,因此可以单独调整波幅。您还可以调整 ScaleTransform.ScaleX 来改变频率,但您需要确保获得整个波浪或动画断断续续,例如尝试 0.5,0.25,0.1

关于c# - 使用正弦波动画圆的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22044041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com