1. 程式人生 > >WPF動畫1---基礎動畫

WPF動畫1---基礎動畫

常用 times double 算法實現 復雜 idt 設計 duration sta

基礎動畫

  1.類似於DoubleAnimation等,如要想要同時改變兩個,要寫兩次 比較麻煩 ,無法暫停或停止動畫

  任何動畫必須最少三個細節,Form-初始值 To-結束值 Duration-時間長度

  其他動畫說明:SpeedRadio 提高或減慢動畫速度 AutoReverse 自動返回初始值 FillBehavior

  

1         private void button1_Click(object sender, RoutedEventArgs e)
2         {
3             DoubleAnimation widthAnimation = new
DoubleAnimation(); 4 widthAnimation.From = 150; 5 widthAnimation.To = 200; 6 widthAnimation.Duration = TimeSpan.FromSeconds(0.5); 7 image1.BeginAnimation(Button.WidthProperty, widthAnimation); 8 }

  2.故事板

    故事板是增強的時間線,可以使用它分組多個動畫,並且具有控制動畫播放的能力--暫停,停止,改變播放位置等。它能夠使TagetProperty和TagetName屬性指向一個特定的屬性和特定的元素

    換句話說,故事板在動畫和希望應用動畫屬性之前架起了一個橋梁

 1         private void button2_Click(object sender, RoutedEventArgs e)
 2         {
 3             Storyboard sb = new Storyboard();
 4 
 5             DoubleAnimation da = new DoubleAnimation();
 6             da.From = 135;//設置開始值
 7             da.To = 200;//設置結束值
 8
da.Duration = TimeSpan.FromSeconds(0.5);//動畫運行時間 9 sb.Children.Add(da);//把動畫對象加入到該故事板中 10 11 //指定要執行該故事板的對象 12 Storyboard.SetTarget(da, image1); 13 //指定要進行動畫處理的屬性 14 Storyboard.SetTargetProperty(da, new PropertyPath(Button.WidthProperty)); 15 16 17 //sb.Completed += new EventHandler((object sender1, EventArgs e1) => { MessageBox.Show("completed"); }); 18 sb.Begin(); 19 }

  3.TranslateTransform

    可以通過TranslateTransform的XProperty屬性來更改button1的X坐標.註意到,我們並不是像以前一樣直接關聯到Button的某個屬性(比如先前的WidthProperty),而是通過其RenderTransformProperty屬性的XProperty來間接關聯的,這中方式叫做"屬性鏈"(PropertyChain)

    解釋propertyChain ---將RenderTransformProperty設置為TranslateTransform類型,所以第二個元素屬性是TranslateTransform.XProperty),簡單地說就是(類型1.屬性1,類型2.屬性2,....類型n.屬性n)

    解釋 new PropertyPath("(0).(1)", propertyChain 中的(0).(1)的意思---propertyChain 是數組,表示propertyChain數組中的TranslateTransform.XProperty屬性(第二個屬性)

 1         private void button3_Click(object sender, RoutedEventArgs e)
 2         {
 3             this.image1.RenderTransform = new TranslateTransform();
 4 
 5             Storyboard sb = new Storyboard();
 6             DoubleAnimation da = new DoubleAnimation();
 7             da.From = 12;
 8             da.To = 100;
 9             da.Duration = TimeSpan.FromSeconds(0.5);
10             sb.Children.Add(da);
11 
12             DependencyProperty[] propertyChain = new DependencyProperty[]
13             {
14                 Image.RenderTransformProperty,
15                 TranslateTransform.XProperty
16             };
17 
18             Storyboard.SetTarget(da, this.image1);
19             Storyboard.SetTargetProperty(da, new PropertyPath("(0).(1)", propertyChain));
20 
21             //sb.Completed += new EventHandler((object sender1, EventArgs e1) => { MessageBox.Show("completed"); });
22             sb.Begin();
23         }

  4.TransformGroup

    1.故事板增加TransformGroup 是把多種變化元素組合成一種變化的容器 比較好用

    2.故事板Begin開始動畫 只寫一次就可以了

 1         //故事板增加TransformGroup   是把多種變化元素組合成一種變化的容器 比較好用
 2         //故事板Begin開始動畫 只寫一次就可以了 
 3         private void button5_Click(object sender, RoutedEventArgs e)
 4         {
 5             DoubleAnimation daScX = new DoubleAnimation();
 6             DoubleAnimation daScY = new DoubleAnimation();
 7             DoubleAnimation daCor = new DoubleAnimation();
 8 
 9             //縮放、旋轉、扭曲等變化效果合並起來。以下幾種基本變化只是單一的變化,如果想要實現多種效果的疊加,那麽就要使用到TransformGroup,否則會報錯。TransformGroup的作用類似於在控件布局中的StackPanel內嵌的作用,是把多種變化元素組合成一種變化的容器。
10             TransformGroup tg = new TransformGroup(); //能夠讓某對象的縮放、旋轉、扭曲等變化效果合並起來使用。是把多種變化元素組合成一種變化的容器
11 
12 
13             ScaleTransform sc = new ScaleTransform(); //縮放
14 
15             RotateTransform rt = new RotateTransform(); //旋轉
16             TranslateTransform tt = new TranslateTransform(); //平移
17             SkewTransform st = new SkewTransform();  //扭曲
18             MatrixTransform mt = new MatrixTransform(); //能夠讓某對象通過矩陣算法實現更為復雜的變形。
19 
20 
21 
22             tg.Children.Add(sc);
23             image1.RenderTransform = tg; // RenderTransform類是為了達到直接去改變某個對象的形狀(比如縮放、旋轉一個元素)的目的而設計的,RenderTransform包含的變形屬性成員就是專門用來改變對象形狀的,它可以實現對元素拉伸,旋轉,扭曲等效果,同時變形特效也常用於輔助產生各種動畫效果。
24             image1.RenderTransformOrigin = new Point(0.5, 0.5);
25             //設置故事版
26 
27             Storyboard.SetTarget(daCor, image1);
28             Storyboard.SetTargetProperty(daCor, new PropertyPath("(UIElement.Opacity)"));
29 
30 
31             Storyboard.SetTarget(daScX, image1);
32             Storyboard.SetTargetProperty(daScX, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));
33 
34             Storyboard.SetTarget(daScY, image1);
35             Storyboard.SetTargetProperty(daScY, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));
36 
37 
38             Storyboard sb = new Storyboard();
39             sb.Children.Add(daScX);
40             sb.Children.Add(daScY);
41             sb.Children.Add(daCor);
42             //設置變換和時間
43             daScX.Duration = new Duration(TimeSpan.FromMilliseconds(100));
44             daScY.Duration = new Duration(TimeSpan.FromMilliseconds(100));
45             daCor.Duration = new Duration(TimeSpan.FromMilliseconds(100));
46             daCor.From = 1;
47             daCor.To = 0.7;
48 
49             daScX.From = 1;
50             daScX.To = 0.7;
51             daScY.From = 1;
52             daScY.To = 0.7;
53             sb.AutoReverse = true;
54             sb.Begin();
55         }

這個是我寫的簡單的動畫demo,寫了20個,簡單的比較全。比較倉促,有錯誤的話可以跟我說下

源碼下載

WPF動畫1---基礎動畫