WPF动画缩放、缓动、缓冲效果

来源:互联网 时间:1970-01-01

缓动效果,也可以叫做缓冲(Easing),就是.Net内置的物理效果吧。我是这么理解的。

我打算实现的效果是,当弹出一个子窗体(ChildWindow)的时候,有一种动画效果,就是短暂的放大然后恢复正常。

然后我找到了这个EasingFunction,于是我用普通的后台方法写了一个方法,可以公共调用,代码如下:

 public void EasingAnimation(UIElement element) { ScaleTransform scale = new ScaleTransform();// { ScaleX = 1, ScaleY = 1 }; element.RenderTransform = scale; Storyboard popup = new Storyboard(); EasingFunctionBase easing = new ElasticEase() { EasingMode = EasingMode.EaseOut, Oscillations = 10, Springiness = 1 };  DoubleAnimation xdkf = new DoubleAnimation() { From = 1, To = 2, Duration = new TimeSpan(0, 0, 0, 500) }; Storyboard.SetTarget(xdkf, element);//更换为scale也无法播放动画 Storyboard.SetTargetProperty(xdkf, new PropertyPath(ScaleTransform.ScaleXProperty));  DoubleAnimation ydkf = new DoubleAnimation() { From = 1, To = 2, Duration = new TimeSpan(0, 0, 0, 500) }; ; Storyboard.SetTarget(ydkf, element);//更换为scale也无法播放动画 Storyboard.SetTargetProperty(ydkf, new PropertyPath(ScaleTransform.ScaleYProperty)); popup.Children.Add(xdkf); popup.Children.Add(ydkf); popup.Begin(this); }

 

 

 

可是无法播放动画,没有反应。我怎么更改都无效,Google了一下,发现这样的写法也比较少。几乎没有可以借鉴的。

后来找到了下面的实现方式,而且,据谣言传说:使用下面的方式效率较高,当然,我刚接触WPF,也不知道怎么验证。

下面的方法代码较少,效果也实现了,而且可以共用。维护起来也比较方便

 public void ScaleEasingAnimation(FrameworkElement element) { ScaleTransform scale = new ScaleTransform() ; element.RenderTransform = scale; element.RenderTransformOrigin = new Point(0.5, 0.5);//定义圆心位置 EasingFunctionBase easing = new ElasticEase() { EasingMode = EasingMode.EaseOut, //公式 Oscillations = 5, //滑过动画目标的次数 Springiness = 10 //弹簧刚度 }; DoubleAnimation scaleAnimation = new DoubleAnimation() { From = 0, //起始值 To = 1, //结束值 EasingFunction = easing, //缓动函数 Duration = new TimeSpan(0, 0, 0, 1, 200) //动画播放时间 }; AnimationClock clock = scaleAnimation.CreateClock(); scale.ApplyAnimationClock(ScaleTransform.ScaleXProperty, clock); scale.ApplyAnimationClock(ScaleTransform.ScaleYProperty, clock); }

 

PS:编码的过程中有过一个马虎的行为,就是TimeSpan,它的构造方法参数我看了个三个参数,分别是时,分,秒,于是我就很自然的认为第四个参数是毫秒,可是后来我发现动画播放的速度非常慢,我意识到时间有问题,于是看了一下参数说明:

TimeSpan(小时,分钟,秒)TimeSpan(天,小时,分钟,秒)TimeSpan(天,小时,分钟,秒,毫秒)

原文地址:http://www.luacloud.com/2011/06/08/wpf-%e5%8a%a8%e7%94%bb-%e7%bc%a9%e6%94%be-%e7%bc%93%e5%8a%a8%e3%80%81%e7%bc%93%e5%86%b2%e6%95%88%e6%9e%9c/

相关阅读:
Top