动画缓动
线性动画有一个缺点,通常让人觉得机械和不够自然。改进动画并创建更趋自然的动画
的秘诀是改变变化速率。不是创建以固定不变的速率改变属性的动画,而是需要设计根
据某种方式加速或减速的动画,实现更趋自然的动画的最简单方法是使用预置的缓动函
数(EasingFunction)。EasyingFunction属性只能接受单个缓动函数对象,所以不能为同
一个动画结合不同的缓动函数。
缓动函数类
在继续分析不同的缓动类之前,理解缓动函数的应用时机是很重要的。所有的缓动函数类都继承自EasingFunctionBase类,并且继承了EasingMode属性:
EasingMode属性有三个值:分别是:EaseIn(在动画开始时应用缓动效果)、EaseOut(动画结束时应用缓动效果)和EaseInOut(在开始和结束时应用缓动动画)。当应用缓动函数时不会改变动画的持续时间。
缓动函数常用类
BackEase :(说明)当使用EaseIn模式应用该缓动函数时,在动画开始之前拉回动画,当使用EaseOut模式应用该缓动函数时,允许动画稍微超越,然后拉回。
(属性) Amplitude属性决定了拉回和超越的量。默认值是1,可减小该属性值(大于0的任何值)以缩减效果,或增加该属性值放大效果。
ElasticEase :(说明)当使用EaseOut模式应用该缓动函数时,使动画超越其最大值并前后摆动,逐渐减慢。当时用EaseIn模式应用该缓动函数时,动画在其开始值周围前后摆动,逐渐增加。 (缓动模式)
(属性)Oscillations属性控制动画前后摆动的次数(振荡次数)。
BounceEase :(说明)执行与Elastic缓东函数类似的效果,只是弹跳永远不会超越初始值或最终值。
(属性) Bounces属性控制动画回调的次数(默认是2)
CircleEase :(说明)使用圆函数加速(使用EaseIn模式), 或减速(使用EaseOut模式)
CublicEase :(说明)使用基于时间立方的函数加速,其效果与Circle类似,但是加速效果更缓和。
QuadraticEase :(说明)使用基于时间平方的函数加速,效果与CublicEase类似,但加速过程更明显。
自定义缓动函数
创建自定义缓动函数一般需要以下几个步骤:
a)、新建一个类,让其继承自EasingFunctionBase类。
b)、重写EaseInCore()方法和CreateInstanceCore()方法。
c)、定义依赖属性。
d)、引用
动态变换(整合了一些动画的例子)
- 变换提供了自定义元素的最强大方式之一。每个元素都能以两种不同的方式使用变换,RenderTransform属性和LayoutTransform属性。RenderTransform属性效率更高。因为是在布局之后应用变换,并且用于变换最终的渲染输出。LayoutTransform在布局前应用,从而其他控件需要重新排列以适应变换。
(1)、使用 变形(RenderTransform)类
1、动态改变多个变换。
就是在TransformGroup中放置多个变换类。
2、动态改变画刷。
使用ColorAnimation改变颜色,使用PointAnimatin改变坐标。
动态改变像素着色器Effect效果
在WPF中,可以使用BitmapEffect对象为每一个Visual对象生成各种各样的效果,一个Visual对象可以设置一种或多种BitmapEffect效果、WPF内置了几种效果:OuterGlowBitmapEffect(外发光)、DropShadowBitmapEffect(阴影)、EmbossBitmapEffect(浮雕)、BlurBitmapEffect(斜角)
控件属性Effect
<!--BlurEffect模糊效果:通过设置BlurEffect的Radius属性可以
设置模糊度-->
<!--按钮效果Effect-->
<Button.Effect>
<!--BlurEffect模糊效果:通过设置BlurEffect的Radius属性可以设置模糊度-->
<BlurEffect Radius="0"/>
</Button.Effect>
缓动关键帧。
由离散关键帧可以得出:尽管关键帧动画被分割成多段,但每段仍使用普通的线性插值。常用的缓动关键帧类有:EasingDoubleKeyFrame、EasingColorKeyFrame、EasyingPointKeyFrame。每个缓动关键帧类和对应的线性插值关键帧类的工作方式相同,但是额外提供了EasyingFunction属性。
基于帧的动画。
使用帧的动画要为静态的CompositionTarger.Rendering事件关联事件处理程序,一旦关联这个处理程序,WPF就开始不断地调用这个事件处理程序,WPF将每秒调用60次。当动画结束后,分离事件处理程序。