Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效

简介:
当我们在进行Silverlight & Blend进行动画设计的过程中,可能需要设计出很多效果不一的图形图像出来作为动画的基本组成元素。然而在设计过程中可能会出现许多的问题,比如当前绘制了一个椭圆,但是在动画中仅仅只需要椭圆的一半或是更多更少的部分用作与动画元素,这时候就需要对椭圆对象进行相应的处理才能满足我们的需求,那到底该怎么做才能实现最终想要的效果呢?本篇将介绍在 Microsoft Expression Blend中进行动画设计的一些常用的功能点和动画设计技巧。
 
一、转换对象为路径
  将一个对象元素转化为路径是非常有用的,通过路径选择工具可以将转化后的路径对象进行任意拉动变形,以达到理想的设计效果。可以通过Blend菜单中的对象-->路径-->转换为路径以实现对象到路径的转换,也可以使用下图所示的方法进行对象到路径的转换:
        
 
  就以上面截取椭圆中的一部分为例,就需要将圆(Ellipse)转化为路径后才能才能通过路径工具对路径进行拖动变形,最终以实现想要的图形效果。如下图所示就是对椭圆进行变形处理后将其多余的部分剪切掉,实现了最终的图形效果:
        
 
< Ellipse  Height ="174"  Width ="240"  Canvas.Left ="64"  Canvas.Top ="274"  Fill ="#FF87A50F" />
 
  在XAML编码级则将会从Ellipse对象转化为Path对象,如上图最终的图形效果Path对应的XAML编码为:
< Path  Fill ="#FF87A50F"  Stretch ="Fill"  Height ="174"  Width ="240"  Canvas.Left ="64"  Canvas.Top ="274"  Data ="M240,87 C240,135.04877 186.27417,174 120,174 C53.72583,174 0,135.04877 0,87 C0,38.951225 53.72583,0 120,0 C186.27417,0 240,38.951225 240,87 z" />
 
二、波感特效
     波感效果也称幽灵效果,如果为某个对象使用了波感效果,通过对象某种行为触发了该效果则对象边框将会出现像波浪一样的效果,直到动画执行完成后隐藏行为对象。如果从技术实现的角度来理解的话,也就是一个对象的的放大动画行为,通过在放大过程中动态改变其透明度来实现。如果不清楚波感效果具体是什么样的效果的可以查看 http://eyeonearth.cloudapp.net/这个站点,点击里面的菜单导航(my location,sms,about,help)中的任意一个就可以进行在线体验。
 
  比如下面的XAML定义,在界面上绘制了一个渐变填充的圆形:
< Ellipse  Height ="48"  x:Name ="RedBall"  Width ="48"  Canvas.Left ="355"  Canvas.Top ="274"  MouseLeftButtonUp ="RedBall_MouseUp" >
    
< Ellipse.Fill >
        
< RadialGradientBrush  GradientOrigin ="0.479999989271164,0.46000000834465" >
            
< RadialGradientBrush.RelativeTransform >
                
< TransformGroup >
                    
< ScaleTransform />
                    
< SkewTransform />
                    
< RotateTransform />
                    
< TranslateTransform  X ="-0.07"  Y ="-0.21" />
                
</ TransformGroup >
            
</ RadialGradientBrush.RelativeTransform >
            
< GradientStop  Color ="#FFFFFFFF" />
            
< GradientStop  Color ="#FFFF0000"  Offset ="1" />
        
</ RadialGradientBrush >
    
</ Ellipse.Fill >
</ Ellipse >
 
   接下来对这个圆形对象进行波感效果设计,本文前面说过波感效果其实就是一个缩放动画,对一个和基础对象一样的对象进行放大到一定程度后将其隐藏。这里需要将上面设计好的圆复制一个作为动画效果设计对象,如下图:
        
 
  缩放动画效果可以通过ScaleTransform来实现,透明度则使用Opacity属性进行设置,要实现波感效果主要就是通过动画在一定的时间内动态的改变这两项的属性值,ScaleTransform的X,Y默认为1,Opacity默认也是1。
  首先创建一个动画容器时间线,然后移动时间轴到1秒的位置,选中复制后的圆形对象设置ScaleTransform的X,Y为3,Opacity的属性值为0,以实现一个放大透明的动画效果。当对象完全透明后就相当于隐藏了,其实也可将其Visibility属性为Collapsed,将对象隐藏不呈现。如下图:
        
 
  主要就是设置了三个属性值,这三个属性值都在动画过度中动态改变,通过Blend中进行设置后可以看到生成了如下XAML编码:
< Storyboard  x:Name ="RedBall_Clicked"  Completed ="RedBall_Clicked_Completed" >
    
< DoubleAnimationUsingKeyFrames  Storyboard.TargetName ="RedBall_Copy"  
    Storyboard.TargetProperty
="(UIElement.Opacity)"  BeginTime ="00:00:00" >
        
< SplineDoubleKeyFrame  KeyTime ="00:00:01"  Value ="0" />
    
</ DoubleAnimationUsingKeyFrames >
    
< DoubleAnimationUsingKeyFrames  Storyboard.TargetName ="RedBall_Copy"  
    Storyboard.TargetProperty
="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"  
    BeginTime
="00:00:00" >
        
< SplineDoubleKeyFrame  KeyTime ="00:00:01"  Value ="3" />
    
</ DoubleAnimationUsingKeyFrames >
    
< DoubleAnimationUsingKeyFrames  Storyboard.TargetName ="RedBall_Copy"  
    Storyboard.TargetProperty
="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"  
    BeginTime
="00:00:00" >
        
< SplineDoubleKeyFrame  KeyTime ="00:00:01"  Value ="3" />
    
</ DoubleAnimationUsingKeyFrames >
</ Storyboard >
 
  通过查看前面的代码片段可以看到,给圆形对象添加了事件处理: MouseLeftButtonUp ="RedBall_MouseUp",也就是点击了圆对象后需要启动动画的执行:
private   void  RedBall_MouseUp( object  sender, MouseButtonEventArgs e)
{
    RedBall_Copy.Visibility 
=  Visibility.Visible;
    RedBall_Clicked.Begin();
}
  
  同样也给动画添加了完成的事件处理 Completed ="RedBall_Clicked_Completed", 当动画执行完成后做什么操作。需要做的就是将圆形对象的相关属性设置为最初的属性值,以便在进行第二次动画的时候能够正确无误的实现其效果。
 
private   void  RedBall_Clicked_Completed( object  sender, EventArgs e)
{
    RedBall_Clicked.Stop();
    RedBall_Copy.Opacity 
=   1 ;
    RedBall_Copy.Visibility 
=  Visibility.Collapsed;
}
 
 
  OK,到这里就完成了整个波感特效的设计制作,最终的运行效果如下图所示,如果你对波感特效感兴趣,建议你下载本文示例代码运行,进一步的体验波感特效。




本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/307618,如需转载请自行联系原作者

目录
相关文章
|
容器
Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)
原文:Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)   Silverlight的基础动画包括偏移、旋转、缩放、倾斜和翻转动画,这些基础动画毫无疑问是在Silverlight中使用得最多的动画效果,其使用也是非常简单的。
965 0
|
容器 数据可视化 内存技术
Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)
原文:Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)   用户界面组件、图像元素和多媒体功能可以让我们的界面生动活泼,除此之外,Silverlight还具备动画功能,它可以让应用程序“动起来”。
794 0
Silverlight & Blend动画设计系列三:缩放动画(ScaleTransform)
原文:Silverlight & Blend动画设计系列三:缩放动画(ScaleTransform)   在Silverlight的动画框架中,ScaleTransform类提供了在二维空间中的坐标内进行缩放操作,通过ScaleTransform可以在水平或垂直方向的缩放和拉伸对象,以实现一个简单的缩放动画效果,故此我将其称为缩放动画(ScaleTransform)。
887 0
Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)
原文:Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)   Silverlight中的倾斜变化动画(SkewTransform)能够实现对象元素的水平、垂直方向的倾斜变化动画效果。
796 0
|
容器
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
原文:Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)   正如你所看到的,Blend是一个非常强大的节约时间的设计工具,在Blend下能够设计出很多满意的动画作品,或许他具体是怎么实现的,通过什么方式实现的我们还是一无所知。
912 0