WPF Study notes(4):Animation
04 Apr 2012I was confused about the animation in Visual Studio 2011 Beta’s installation and Metro’s applications.
There is no doubt that their interface is perfect.
Demo:
This pic can’t show the path which these buttons stand on,please run code yourself.
XAML:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Lazy_Setter_Trigger.MainWindow" Title="Animation" Width="350" Height="340"> <Grid x:Name="LayoutRoot"> <Grid.Resources> <!--Moving Path--> <PathGeometry x:Key="movingPath" Figures="M 0,150 C 300,100 300,400 600,120"/> </Grid.Resources> <!--Layout--> <Grid.ColumnDefinitions> <ColumnDefinition Width="70"/> <ColumnDefinition Width="70"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="70"/> <RowDefinition Height="70"/> </Grid.RowDefinitions> <!--Translation--> <Button Content="Translation" HorizontalAlignment="Left" VerticalAlignment="Top" Width="70" Height="70" Click="Button_Click" Grid.Row="0" Grid.Column="0"> <Button.RenderTransform> <TranslateTransform x:Name="doubleAnimation" /> </Button.RenderTransform> </Button> <!--Bounce--> <Button Content="Bounce" Width="70" Height="70" Click="Button_Click_1" VerticalAlignment="Top" Grid.Row="0" Grid.Column="1"> <Button.RenderTransform> <TranslateTransform x:Name="bounce"/> </Button.RenderTransform> </Button> <!--Path Animation--> <Button Content="Path Animation" Width="70" Height="70" Click="Button_Click_2" Grid.Row="1" Grid.Column="0"> <Button.RenderTransform> <TranslateTransform x:Name="render"/> </Button.RenderTransform> </Button> <!--Key Frames--> <Button Content="Key Frame" Width="70" Height="70" Click="Button_Click_3" Grid.Row="1" Grid.Column="1"> <Button.RenderTransform> <TranslateTransform x:Name="keyframe"/> </Button.RenderTransform> </Button> </Grid> </Window>
CS:
using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace Lazy_Setter_Trigger { public partial class MainWindow : Window { public MainWindow() { this.InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { DoubleAnimation x = new DoubleAnimation(); DoubleAnimation y = new DoubleAnimation(); //指定起点 // x.From = 0D; //y.From = 0D; //指定终点 Random r = new Random(); x.To = r.NextDouble() * 300; y.To = r.NextDouble() * 300; x.AccelerationRatio = 1;//加速速率 y.AccelerationRatio = 0.5; //x.RepeatBehavior = RepeatBehavior.Forever;//动画重复循环 //指定时长 Duration duration = new Duration(TimeSpan.FromMilliseconds(300)); x.Duration = duration; y.Duration = duration; this.doubleAnimation.BeginAnimation(TranslateTransform.XProperty,x); this.doubleAnimation.BeginAnimation(TranslateTransform.YProperty,y); } private void Button_Click_1(object sender, RoutedEventArgs e) { DoubleAnimation x = new DoubleAnimation(); DoubleAnimation y = new DoubleAnimation(); //设置反弹 BounceEase be = new BounceEase(); be.Bounces = 7;//弹跳三次 be.Bounciness = 2;//弹性程度,越大越低 y.EasingFunction = be; x.To = 300; y.To = 300; //指定时长 Duration duration = new Duration(TimeSpan.FromMilliseconds(2000)); x.Duration = duration; y.Duration = duration; this.bounce.BeginAnimation(TranslateTransform.XProperty,x); this.bounce.BeginAnimation(TranslateTransform.YProperty,y); } private void Button_Click_2(object sender, RoutedEventArgs e) { //从XAML代码中获取移动路径 PathGeometry pg = this.LayoutRoot.FindResource("movingPath") as PathGeometry; Duration duration = new Duration(TimeSpan.FromMilliseconds(600)); //创建动画 DoubleAnimationUsingPath x = new DoubleAnimationUsingPath(); x.PathGeometry = pg; x.Source = PathAnimationSource.X; x.Duration = duration; DoubleAnimationUsingPath y = new DoubleAnimationUsingPath(); y.PathGeometry = pg; y.Source = PathAnimationSource.Y; y.Duration = duration; //执行动画 this.render.BeginAnimation(TranslateTransform.XProperty,x); this.render.BeginAnimation(TranslateTransform.YProperty,y); } private void Button_Click_3(object sender, RoutedEventArgs e) { //创建动画 DoubleAnimationUsingKeyFrames x = new DoubleAnimationUsingKeyFrames(); x.Duration = new Duration(TimeSpan.FromMilliseconds(1000)); //创建,添加关键帧 SplineDoubleKeyFrame kf = new SplineDoubleKeyFrame(); kf.KeyTime = KeyTime.FromPercent(1); kf.Value=400; KeySpline ks = new KeySpline(); ks.ControlPoint1 = new Point(0,1); ks.ControlPoint2 = new Point(1,0); kf.KeySpline = ks; x.KeyFrames.Add(kf); this.keyframe.BeginAnimation(TranslateTransform.XProperty,x); } } }
转载请注明:于哲的博客 » WPF Study notes(4):Animation