WPF学习(15)-动画基础

       WPF其中核心的一个模块就是对于动画的支持,我们知道之前更多人使用的是flash来制作动画,但是现在flash已经不被ios支持,并且众多平台开始排斥flash,但是动画的基本制作是不会变得,就好像最开始的时候,而WPF框架自带动画支持,确实是一个巨大的进步,意味着我们可以在我们的应用程序中构建更复杂,更具有互动性的界面,虽然很多人说只要实现功能就可以,华而不实的东西没什么用,但是我觉得不管是从哪个地方切入,动画是任何一个程序员都要会的东西。

       而且WPF的动画是基于属性的,而不是基于时间的,比如一个元素在Canvas内移动,只需要修改Canvas.left和Top就可以实现动画效果,而且因为基于属性,可以叠加多个动画在一起,这样做最大的好处就是代码量大大缩减,效果也大大的提高,并且对性能的影响不是那么的巨大。所以创建动画的秘诀就在于找到那个正确的属性就可以。需要注意的是,这个属性必须是依赖属性,因为我们需要使用属性的动态识别系统。

       WPF的动画,可以简单分为三类,使用插值的动画,比如DoubleAnimation,使用关键帧的动画,如doubleanimationusingframe,使用路径的动画,比如PointAnimationUsingPath。

    
        

 一个简单的按钮,然后点击按钮,让按钮的宽度变化,就是一个动画效果

 DoubleAnimation da = new DoubleAnimation();
 da.From = 50;
 da.To = this.Width;
 da.Duration =TimeSpan.FromSeconds(5);
 bt1.BeginAnimation(Button.WidthProperty,da);

   当然可以直接在xaml页面中用故事板完成刚刚的动画,这个例子里面动画直接放在了按钮的事件触发器里面。

        

      还可以把动画放在资源里面,然后一样的使用样式关联触发器

    
        
            
        
        
    

    通过以上三个例子,理解了这个动画是基于属性的,就是在一定时间内,不断修改动画对应的元素的某一个属性,既然这样,那么要改什么属性,只要去找对应的动画类,前面加了那个属性的数据类型的名字,如果实在没有就自己去实现。

       还有一个有点意思的是一个故事板(storyboard)里面可以放多个动画 ,  这个例子就是一个圆,不仅top在变,left也在变。 


    
        
            
                
                    
                    
                
            
        
    
    
        
    

       AutoReverse属性,就是当他是true的时候,动画结束之后会自动反转,fillbehavior属性,是个枚举值,Stop表示动画结束,就会恢复到原来的值,而holdend则是继续保持在动画结束的地方。而这些都是TimeLine类的属性,里面有好多,比如是不是延迟,加速或减速运行动画,包括上面的自动翻转,fillbehavio,repetbehavior等,多用几次我反正是很快就记住了。

        控制播放,前面已经接触到了beginstoryboard,还有包括Pausestoryboard,ResumeStoryboard,stopstoryboard,seekstoryboard,setstoryboardspeedratio,skipstoryboardtofill,removestoryboard,看名字就可以大概看出是干什么用的。

        下面的例子就阐述了如何控制动画的开始,结束,暂停,恢复和跳转,完全使用的是XAML。


    
        
            
                
                    
                
            
        
        
            
        
        
            
        
        
            
        
        
            
        
    
    
        
            
            
            
                
                
                
                
                
            
               
          

      还有一个就是动画缓动,可以简单理解为为动画增加一些效果,否则动画就是线性地改变某个属性值,不自然弥补生动,但是这个玩意儿我怎么感觉应该交给设计师来做呢?好吧,咱们立志成为full statck,以下实例就是一个缓动函数的应用。


    
        
            
                
                    
                    
                
            
        
    
    
        
    

    最后,就是一个组织动画的经验,比如我们对很多属性使用了动画,但是属性改变看起来并不连续平滑,这样的动画效果并不很好,所以要选择合适的属性,比如改变背景颜色,如果直接是Color就不连续,可以把颜色变为渐变色,然后修改Offset

 

 

 

你可能感兴趣的:(WPF)