如何设置SpringVector3NaturalMotionAnimation的偏移量?

问题描述 投票:0回答:2

如何设置

offset
SpringVector3NaturalMotionAnimation
点?使用以下代码,动画效果很好,除了我无法将偏移点设置为
FrameworkElement
的中间。现在
offset
位于左上角。

       private static void ScaleAnimation_Internal(FrameworkElement TargetFrameworkElement, int ScaleInProsents, TimeSpan Duration, TimeSpan Delay, int DampingRatioProsent)
        {
            AnimationClass TargetAnimationClass = AddScaleAnimation(TargetFrameworkElement);
            Compositor TargetCompositor = Window.Current.Compositor;
            //UPDATE
            TargetAnimationClass.TargetSpringVector3NaturalMotionAnimation.FinalValue = new Vector3((float)ScaleInProsents / 100);
            if (Duration != TimeSpan.Zero) TargetAnimationClass.TargetSpringVector3NaturalMotionAnimation.Period = Duration;
            if (Delay != TimeSpan.Zero) TargetAnimationClass.TargetSpringVector3NaturalMotionAnimation.DelayTime = Delay;
            if (DampingRatioProsent >= 0) TargetAnimationClass.TargetSpringVector3NaturalMotionAnimation.DampingRatio = (float)DampingRatioProsent / 100;
            //START ANIMATION
            TargetFrameworkElement.StartAnimation(TargetAnimationClass.TargetSpringVector3NaturalMotionAnimation);
        }
c# animation uwp offset
2个回答
1
投票

正如@Johnny Westlake所说,您只需要在调用

CenterPoint
之前设置
StartAnimation
即可。例如

Compositor _compositor = Window.Current.Compositor;
SpringVector3NaturalMotionAnimation _springAnimation;

private void Btn_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    CreateOrUpdateSpringAnimation(1.5f);
    (sender as UIElement).CenterPoint = new Vector3((float)(Btn.ActualWidth / 2.0), (float)(Btn.ActualHeight / 2.0), 1f);
    (sender as UIElement).StartAnimation(_springAnimation);

}

private void Btn_PointerExited(object sender, PointerRoutedEventArgs e)
{
    CreateOrUpdateSpringAnimation(1.0f);
    (sender as UIElement).CenterPoint = new Vector3((float)(Btn.ActualWidth / 2.0), (float)(Btn.ActualHeight / 2.0), 1f);
    (sender as UIElement).StartAnimation(_springAnimation);


}
private void CreateOrUpdateSpringAnimation(float finalValue)
{
    if (_springAnimation == null)
    {
        _springAnimation = _compositor.CreateSpringVector3Animation();
        _springAnimation.Target = "Scale";

    }

    _springAnimation.FinalValue = new Vector3(finalValue);
}

Xaml 代码

<Grid>
    <Button Name="Btn" Content="ClickMe" 
            PointerEntered="Btn_PointerEntered"
            PointerExited="Btn_PointerExited"
           VerticalAlignment="Center" HorizontalAlignment="Center" >

    </Button>
</Grid>

0
投票

与@Nico Zhu相同,但不是直接从元素获取实际高度,而是从发送者对象获取。

Compositor _compositor = App.MainWindow.Compositor;
SpringVector3NaturalMotionAnimation _springAnimation;

private void CreateOrUpdateSpringAnimation(float finalValue)
{
    if (_springAnimation == null)
    {
        _springAnimation = _compositor.CreateSpringVector3Animation();
        _springAnimation.Target = "Scale";
    }

    _springAnimation.FinalValue = new Vector3(finalValue);
}

private void element_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    // Scale up to 1.5
    CreateOrUpdateSpringAnimation(1.5f);
    var element = sender as FrameworkElement; // Cast sender to FrameworkElement
    element.CenterPoint = new Vector3((float)(element.ActualWidth / 2.0), (float)(element.ActualHeight / 2.0), 1f);
    element.StartAnimation(_springAnimation);
}

private void element_PointerExited(object sender, PointerRoutedEventArgs e)
{
    // Scale back down to 1.0
    CreateOrUpdateSpringAnimation(1.0f);
    var element = sender as FrameworkElement; // Cast sender to FrameworkElement
    element.CenterPoint = new Vector3((float)(element.ActualWidth / 2.0), (float)(element.ActualHeight / 2.0), 1f);
    element.StartAnimation(_springAnimation);
}
© www.soinside.com 2019 - 2024. All rights reserved.