流体网格高度动画 UWP



我必须创建一个网格高度的动画(这是使用麦克风的db数据,我用随机模拟了数据的接收(。但是我创作的动画一点也不流畅。我怎样才能让一个动画来制作一个像谷歌助手(谷歌播放应用程序(这样带有四个颜色条的例子(我的意思是作为流畅的动画(?

MainPage.xaml:

<Grid>
    <Grid x:Name="ColorGrid" Background="Blue" Height="150" Width="40" CornerRadius="20"/>
</Grid>

MainPage.xaml.cs:

DispatcherTimer TimerHeight = new DispatcherTimer();
Storyboard storyboard1 = new Storyboard();
double AnimationTime = 50;
public MainPage()
{
    this.InitializeComponent();
    TimerHeight.Interval = TimeSpan.FromMilliseconds(50);
    TimerHeight.Tick += TimerHeight_Tick;
    TimerHeight.Start();
}
private void TimerHeight_Tick(object sender, object e)
{
    double ActualHeight = GetRandomNumber(150,350);
    //ColorGrid.Height = ActualHeight;
    StartAnimation(ColorGrid, ActualHeight);
}
public double GetRandomNumber(double minimum, double maximum)
{
    Random random = new Random();
    return random.NextDouble() * (maximum - minimum) + minimum;
}
private void StartAnimation(Grid GridColor, double GridHight)
{
    storyboard1 = new Storyboard();
    var AnimationOne = new EasingDoubleKeyFrame() { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTime)), Value = GridHight, EasingFunction = new QuarticEase() { EasingMode = EasingMode.EaseOut } };
    var AnimOne = new DoubleAnimationUsingKeyFrames();
    AnimOne.EnableDependentAnimation = true;
    AnimOne.KeyFrames.Add(AnimationOne);
    Storyboard.SetTargetProperty(AnimOne, "(FrameworkElement.Height)");
    Storyboard.SetTarget(AnimOne, GridColor);
    storyboard1.Children.Add(AnimOne);
    storyboard1.Begin();
}

虽然我使用了动画,但好像有镜头。如何获得流畅的动画?

提前谢谢。

虽然我使用了动画,但好像有镜头。如何获得流畅的动画?

如果你想使动画流畅,你可以设置AnimationTime(KeyTime(更大。

对于我的测试,如果您将动画时间设置为 600,动画将非常流畅。

private void StartAnimation(Grid GridColor, double GridHight)
{
    storyboard1 = new Storyboard();
    var AnimationOne = new EasingDoubleKeyFrame() {
        KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(600)),
        Value = GridHight,
        EasingFunction = new QuarticEase() { EasingMode = EasingMode.EaseOut } };
    var AnimOne = new DoubleAnimationUsingKeyFrames();
    AnimOne.EnableDependentAnimation = true;
    AnimOne.KeyFrames.Add(AnimationOne);
    Storyboard.SetTargetProperty(AnimOne, "(FrameworkElement.Height)");
    Storyboard.SetTarget(AnimOne, GridColor);
    storyboard1.Children.Add(AnimOne);
    storyboard1.Begin();
}

您好,欢迎来到我们美丽的社区!

首先,您是否尝试过在没有所有Visual Studio的调试系统的情况下运行该应用程序?因为它很重,可能会导致动画不流畅......我有时也经历过。因此,首先要做的是部署您的应用程序,然后只需单击它即可运行它,就像它是从商店安装的一样。

第二。。。您不是想在如此短的几毫秒内制作太多动画吗?尝试将TimeSpan设置得更长一点(例如 1000(,看看会发生什么......

最新更新