Windows Phone开发(42):缓动动画
创始人
2024-09-12 00:10:36
0

前面在讨论关键帧动画的时候,我有意把几个带缓动动画的关键帧动画忽略掉,如EasingColorKeyFrame、 EasingDoubleKeyFrame和EasingPointKeyFrame,其实为数不多,就这么几个。因为我希统一放到这节课程来吹一下缓动 函数。

所谓缓动函数,就是我们在代数里面说的函数,说白了嘛,就是根特定的函数规则,用输入的值算出最终值,使得动画在两个关键帧之间不再是均衡过度,而是带有加/减速或其他效果,当然,还要取决于算法。

比如函数

所以,我们看出来了,缓动函数涉及复杂的数学运算,不过,灰常幸运的是,常用的缓函数MS已经为我们封装好了,这也是从 WPF/Silverlight中迁移到WP的,集成性兼容性MD的好,所以,在使用的时候,大家可以轻松一大把了,因此,当你在练习的时候,记得冲一杯 咖啡放在桌上,一边写代码一边品尝吧。呵呵,编程快乐,快乐编程。

如果你干过WPF或SL,这些东西你会觉得灰常Easy,我不是第一次强调了,所以说,基础很重要,把基础扎实了,无论你学习什么新玩意儿,都可以一通百通的,不管你信不信,反正我信了。

如何你对缓动函数没有一个直观的认识也不要紧,下面推荐大家一个游戏,很好玩的,不玩你学WP会后悔的。游戏地址:http://samples.msdn.microsoft.com/Silverlight/silverlight_next/Animations/easing_functions_gallery/testpage.html

记住要认真玩,这样你才会熟悉缓动函数与相关的类。

某致理名言说得好,“自己动手,丰衣足食”,还是老规矩,实例决定一切,动手干活吧。

演练一

请参考以下XAML代码构建你的UI。

  1.        
  2.         
  3.                  VerticalAlignment="Top"   
  4.                  Fill="Orange"   
  5.                  Width="100"   
  6.                  Height="100"   
  7.                  x:Name="elp">   
  8.                
  9.                    
  10.                
  11.            
  12.            
  13.                
  14.                 
  15. Storyboard.TargetName="trm"   
  16. Storyboard.TargetProperty="Y"   
  17. RepeatBehavior="30">   
  18.                        
  19.                        
  20.                            
  21.                                
  22.                            
  23.                        
  24.                    
  25.                
  26.            
  27.        

后台C#代码启用动画。

  1. private void gridLoaded(object sender, RoutedEventArgs e)   
  2. {   
  3.     this.std.Begin();   
  4. }   

现在,运行上面的示例,你会发现圆在下落的过程发生了两次回弹,动画才结束,而且一开始较慢,后来渐渐加速,这就是缓动函数所产生的效果。

演练二:

参考以下XAML代码创建UI界面。

  1.        
  2.            
  3.                
  4.                    
  5.                        
  6.                        
  7.                        
  8.                    
  9.                
  10.            
  11.            
  12.                
  13.                 
  14. Storyboard.TargetName="brs"   
  15. Storyboard.TargetProperty="(LinearGradientBrush.GradientStops)[1].(GradientStop.Offset)"   
  16. RepeatBehavior="35"   
  17. AutoReverse="True">   
  18.                        
  19.                        
  20.                            
  21.                                
  22.                            
  23.                        
  24.                    
  25.                
  26.            
  27.        

在gridLoaded上右击,从弹出的菜单中选择“导航到事件处理程序”,在生成的方法中完成以下C#代码。

  1. private void gridLoaded(object sender, RoutedEventArgs e)   
  2. {   
  3.     std.Begin();   
  4. }   

运行程序后,你会看到渐变填充中间黄色的色块在左右来回移动。

演练三:

请参照以下XAML建立UI。

  1.     
  2.         x:Class="Sample.Page3"   
  3.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
  4.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
  5.         xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"   
  6.         xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"   
  7.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"   
  8.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
  9.         FontFamily="{StaticResource PhoneFontFamilyNormal}"   
  10.         FontSize="{StaticResource PhoneFontSizeNormal}"   
  11.         Foreground="{StaticResource PhoneForegroundBrush}"   
  12.         SupportedOrientations="Portrait" Orientation="Portrait"   
  13.         mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"   
  14.         shell:SystemTray.IsVisible="True">   
  15.            
  16.            
  17.                
  18.                    
  19.                    
  20.                
  21.                
  22.                
  23.                    
  24.                    
  25.                
  26.                
  27.                
  28.                 
  29.                            Width="60" Height="45" Fill="White"   
  30.                            MouseLeftButtonDown="onShow"/>   
  31.                 
  32.                            VerticalAlignment="Center"   
  33.                            Text="请点击左下角的白色矩形。"   
  34.                            TextWrapping="Wrap"   
  35.                            Margin="30,0,40,0"   
  36.                            FontSize="45"/>   
  37.                 
  38.                             Height="180"   
  39.                             VerticalAlignment="Bottom">   
  40.                     
  41.                                Margin="20,22,20,20"   
  42.                                FontSize="32"   
  43.                                Text="你好,点击下面的按钮吧。"/>   
  44.                     
  45.                             Click="onHide"/>   
  46.                        
  47.                         
  48.                                             Y="180"/>   
  49.                        
  50.                    
  51.  
  52.                    
  53.                        
  54.                         
  55.                             Storyboard.TargetName="trm"   
  56.                             Storyboard.TargetProperty="Y"   
  57.                             Duration="1">   
  58.                             
  59.                                 KeyTime="0:0:0" Value="180"/>   
  60.                             
  61.                                 KeyTime="0:0:1" Value="0">   
  62.    
  63.                                        
  64.    
  65.                                
  66.                            
  67.                        
  68.                        
  69.                         
  70.                             Duration="0:0:1"   
  71.                             Storyboard.TargetName="trm"   
  72.                             Storyboard.TargetProperty="Y">   
  73.                             
  74.                                                   Value="0"/>   
  75.                             
  76.                                                   Value="180">   
  77.    
  78.                                        
  79.    
  80.                                
  81.                            
  82.                        
  83.                    
  84.                
  85.            
  86.        

分别在onShow和onHide方法上右击,从弹出的菜单中选择“导航到事件处理程序”,完成后台代码逻辑。

  1. private void onShow(object sender, MouseButtonEventArgs e)   
  2. {   
  3.     if (stdHide.GetCurrentState() != ClockState.Stopped)   
  4.     {   
  5.         stdHide.Stop();   
  6.     }   
  7.     stdShow.Begin();   
  8. }  
  9. private void onHide(object sender, RoutedEventArgs e)   
  10. {   
  11.     if (stdShow.GetCurrentState() != ClockState.Stopped)   
  12.     {   
  13.         stdShow.Stop();   
  14.     }   
  15.     stdHide.Begin();   
  16. }   

现在,运行程序,单击屏幕左下方的白色矩形,这时候屏幕下方会弹出一个面板,再点击面板上的按钮,面板会缩下去。

这样,使用动画,我们就做出了一个类似工具条的效果。

 

相关内容

热门资讯

施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...
VMware vFabric (2012年5月17日中国北京)——全球虚拟化和云基础架构厂商VMware公司(NYSE:VMW)今...
由浅入深学习CentOS入门 在系统的学习CentOS入门的知识中,我们掌握了一些基本的设置。今天我们来讲一下CentOS入门中的...
虚拟现实 人工智能和人体未来会... 探讨像虚拟现实和人工智能这样的技术将会跟人体发生怎样的融合。未来将会出现模糊虚拟现实和现实本身界限的...