教育部普通高等教育十二五国家级规划教材《C#程序设计及应用教程》第3版(包括简化版:《C#程序设计教程》第3版)第10章动画与多媒体2Ch10动画与多媒体10.1WPF动画基础10.2基本动画10.3关键帧动画10.4路径动画10.5用代码实现变换10.6对绘图结果进行效果处理10.7音频和视频的播放310.1WPF动画基础在WPF应用程序中,所有可见对象都可以实现动画功能,具体的实现可以分为两大类动画技术。使用WPF动画计时系统基本动画(From/To/By)关键帧动画路径动画自定义动画不使用WPF动画计时系统逐帧动画410.1WPF动画基础除了逐帧动画以外,本地动画、时钟动画以及演示图板动画都是基于Timeline类来实现的。Timeline类是定义计时行为的抽象基类。该抽象类提供了控制动画播放的属性,从该类继承的各种动画类都可以使用这些属性。Duration属性RepeatBehavior属性AutoReverse属性BeginTime属性FillBehavior属性控制时间线速度的属性(SpeedRatio、AccelerationRatio、DecelerationRatio属性)5利用Duration属性控制动画例10-1(a)初始效果(b)动画播放期间的效果6利用RepeatBehavior属性控制动画例10-27利用AutoReverse属性控制动画例10-38利用SpeedRatio、AccelerationRatio、DecelerationRatio属性控制动画例10-4不同速度控制的运行效果910.2基本动画1.基本动画类型2.用本地动画实现基本动画3.用Storyboard实现基本动画4.用时钟动画实现基本动画101.基本动画类型WPF提供的基本动画可控制多种类型,这些动画的命名约定为类型Animation可用的类型有:Byte、Int16、Int32、Int64、Single、Double、Decimal、Color、Point、Size、Thickness、Rect、Vector、Vector3D、Quaternion、Rotation3D。在这些动画类型中,常用有DoubleAnimation、ColorAnimation和PointAnimation。11From/To/By动画的基本用法(假定基值为120)格式举例说明From起始值To结束值From50To200从起始值50逐渐变化到结束值200From起始值By偏移量From50By150从起始值50逐渐变化到200(即50+150)From起始值From50从起始值50逐渐变化到基值120To结束值To150从基值120逐渐变化到结束值150By偏移量By50从基值120逐渐变化到170(即120+50)122.用本地动画实现基本动画本地动画是指直接对对象的属性值进行处理的动画,这种动画受计时系统支持,但不能对动画进行暂停等交互操作。本地动画只能用C#代码来实现,无法用XAML来描述。13用本地动画实现基本动画示例10-5用本地动画实现基本动画运行效果143.用Storyboard实现基本动画基本动画、关键帧动画、路径动画都可以使用Storyboard来实现。用Storyboard实现动画时,既可以用C#代码来编写,也可以用XAML来描述。15用Storyboard实现基本动画示例例10-6、10-7运行效果164.用时钟动画实现基本动画时钟动画适用于处理大量类型相同而且需要交互的场合。例10-8运行效果1710.3关键帧动画1.关键帧动画类型2.利用BlendforVS2012制作关键帧动画3.在关键帧动画中插入样条动画4.在关键帧动画中插入缓动函数1.关键帧动画类型关键帧动画类型是内插关键帧的容器。关键帧动画类型的命名约定为类型AnimationUsingKeyFrames在每个关键帧动画类型的开始标记和结束标记之间,都可以使用多种内插关键帧类型,每个内插关键帧都由关键时间和关键值组成。18关键帧动画可控制的属性类型以及可用的内插方法WPF可控制的属性类型Silverlight可控制的属性类型可用的内插方法Boolean、Matrix、String、ObjectObject离散Byte、Color、Decimal、Double、Int16、Int32、Int64、Point、Rect、Quaternion、VectorRotation3D、Single、Size、Thickness、Vector3DColor、Double、Point离散、线性、样条192.利用BlendforVS2012制作关键帧动画在Window7下制作关键帧动画或者路径动画时,或者制作应用程序原型时,一般借助Blend+SketchFlowforVS2012来实现,这样能极大地提高项目开发的效率。20BlendforVS2012的设计界面21使用BlendforVS2012制作关键帧动画的操作要点创建演示图板后才能利用时间线添加关键帧。先选择要对其进行动画的对象,然后拖动时间线到某个关键时间,再修改该关键时间的目标属性值。在事件触发器中指定事件。223.在关键帧动画中插入样条动画样条动画使用三次贝塞尔曲线来实现,每条曲线段都由4个点来定义:起点、终点和中间的两个控制点。23图10-15样条曲线及其控制点样条动画示例例10-10244.在关键帧动画中插入缓动函数在内插关键帧中,还可以将特殊的数学公式f(t)应用于动画,即随着时间t的变化,将函数f(t)的值自动插入到某个属性值中,从而实现各种特殊的动画效果。这些实现特殊效果的数学公式称为缓动函数。25常用的缓动函数名称说明BackEase在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动。其效果类似跳远时先后退几步再起跑BounceEase创建具有弹跳效果的动画。一般使用EaseOut模拟落地的反弹效果。Bounces属性获取或设置弹跳次数,Bounciness属性获取或设置下一次反弹的幅度。该值越小表示弹性越好,值越大表示弹性越差CircleEase使用循环函数加速和减速的动画ElasticEase类似于弹簧在停止前来回振荡的动画ExponentialEase使用指数公式加速和减速的动画PowerEase使用公式f(t)=tp(其中,p等于Power属性)加速和减速的动画SineEase使用正弦公式加速和减速的动画26缓动函数动画示例例10-11272810.4路径动画1.使用PathGeometry绘制路径2.路径动画类型3.利用BlendforVS2012制作路径动画1.使用PathGeometry绘制路径例10-12路径标记语法示例292.路径动画类型WPF提供的路径动画类型有:PointAnimationUsingPathDoubleAnimationUsingPathMatrixAnimationUsingPath30路径动画类型示例例10-13PointAnimationUsingPath示例31路径动画类型示例例10-14DoubleAnimationUsingPath示例32路径动画类型示例例10-15MatrixAnimationUsingPath示例333.利用BlendforVS2012制作路径动画在实际的项目开发中,一般借助BlendforVS2012让其自动生成实现路径动画的代码。在BlendforVS2012中,开发人员只需要通过鼠标拖动和简单操作,即可以让其自动生成对应的路径动画。34利用BlendforVS2012制作路径动画步骤第1步:在Blend中绘制形状和路径第2步:在Blend中将形状和文本转换为路径第3步:在Blend中合并和剪切路径35利用BlendforVS2012制作路径动画示例例10-16在Blend中用铅笔绘制一条螺旋状路径,然后让小球沿着该路径移动。363710.5用代码实现变换1.二维变换基本概念2.对变换进行动画处理1.二维变换基本概念用户通过改变变换矩阵的值,可以旋转、按比例缩放、扭曲和平移对象。用户也可以通过WPF提供的许多用起来更容易的变换类,可直接对元素进行变换操作。38WPF的基本变换类型类型变换属性brushTransform,RelativeTransformContainerVisualTransformDrawingGroupTransformFrameworkElementRenderTransform,LayoutTransformGeometryTransformTextEffectTransformUIElementRenderTransform392.对变换进行动画处理可以通过WPF控件的Effect属性对各种变换(平移、旋转、缩放、扭曲等)进行动画处理。40对变换进行动画处理示例例10-19对变换进行动画处理示例414210.6对绘图结果进行效果处理1.模糊效果(BlurEffect)2.阴影效果(DropShadowEffect)3.文本效果(TextEffect)1.模糊效果(BlurEffect)利用继承自Effect的BlurEffect类,可以使目标纹理具有模糊效果(模拟通过离焦透镜查看对象的情形)。例10-2043用BlurEffect实现模糊效果2.阴影效果(DropShadowEffect)利用继承自Effect的DropShadowEffect类,可以在目标纹理对象的周围创建投影效果,比如柔和阴影、噪音、强烈投影以及外部发光效果等。例10-2144用DropShadowEffect实现阴影效果3.文本效果(TextEffect)对于模糊效果和阴影效果来说,Effect用于将所有字符作为一个整体进行处理,而利用TextEffect,则可以对文本中的每个字符进行效果和变换处理。例10-2245用DropShadowEffect实现旋转效果4610.7音频和视频的播放1.语音2.音频和视频(MediaElement)3.SoundPlayerAction类1.语音Microsoft.NET框架在System.Speech.Synthesis.SpeechSynthesizer类中提供了对已安装的语音合成引擎功能的访问,在需要通过文字发音的项目需求中非常有用。47语音基本用法示例例10-23语音用法示例482.音频和视频(MediaElement)在WPF中,播放音频或视频最简单的方法就是用MediaElement控件来实现,该对象可播放多种类型的音频文件和视频文件,而且还能控制媒体的播放、暂停、停止以及音量和播放速度等。若要在WPF中使用音频或视频,必须在计算机上安装WindowsMediaPlayer10或更高版本。下面的XAML描述了MediaElement控件最基本的用法:MediaElementSource=media/a.wmv/49独立模式下MediaElement的用法示例例10-24在独立模式下MediaElement的基本用法50时钟模式下MediaElement的用法示例例10-25时钟模式下MediaElement的基本用法513.SoundPlayerAction类SoundPlayerAction类专门用于播放.wav类型的音频文件(不能播放其他类型的音频件)。52本章习题153