翻译和缩放动画

时间:2011-10-02 08:37:23

标签: wpf scale translate-animation

我在画布中有一个wpf应用程序和图像。图像放在0,0。

我需要为从0,0到500,200移动的图像设置动画,同时增长(我喜欢产生像从远到近的效果)。

如果我这样做:

        TranslateTransform ttx = new TranslateTransform();
        TranslateTransform tty = new TranslateTransform();

        DoubleAnimationUsingKeyFrames dax = new DoubleAnimationUsingKeyFrames();
        dax.KeyFrames.Add(new LinearDoubleKeyFrame(500, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));

        DoubleAnimationUsingKeyFrames day = new DoubleAnimationUsingKeyFrames();
        day.KeyFrames.Add(new LinearDoubleKeyFrame(200, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));

        TransformGroup tg = new TransformGroup();
        tg.Children.Add(ttx);
        tg.Children.Add(tty);

        krug.RenderTransform = tg;

        ttx.BeginAnimation(TranslateTransform.XProperty, dax);
        tty.BeginAnimation(TranslateTransform.YProperty, day);

这很好用。它将图像“krug”的翻译从0,0动态变为500,200。

但是当我在翻译时添加用于缩放图像的逻辑:

        ScaleTransform zoom = new ScaleTransform();
        DoubleAnimationUsingKeyFrames zoomTimeline = new DoubleAnimationUsingKeyFrames();
        zoomTimeline.KeyFrames.Add(new LinearDoubleKeyFrame(2, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
        tg.Children.Add(zoom);
        zoom.BeginAnimation(ScaleTransform.ScaleXProperty, zoomTimeline);
        zoom.BeginAnimation(ScaleTransform.ScaleYProperty, zoomTimeline);

然后图像不会停止到500,200但是更远。如果缩放系数较大,则翻译将来会更多。如何控制动画停在500,200?

3 个答案:

答案 0 :(得分:1)

组合缩放和平移变换时遇到的问题是它会从原点(ScaleTransform.CenterX,ScaleTransform.CenterY)缩放平移变换

例如,如果要将其向右滑动50,并将其缩放两倍,它实际上会移动100的净距离。

尝试动画ScaleTransform.CenterX和ScaleTransform.CenterY以匹配您的平移变换。我相信这会让你随心所欲地扩展。

答案 1 :(得分:0)

将动画放在一个故事板中,并设置故事板的持续时间以控制动画的长度。

然后启动故事板。

答案 2 :(得分:0)

我找到了解决方案。我创建了单独的用户控件,只执行ScaleTransform。然后我在用户控件上应用TranslateTransform。