[08.07]Windows Phone 动画理论基础以及Tips

前些天看到某些网站不支持Live Writer,某些产品经理还以此为傲,并且觉得这是个了不起的事情。
这个事情不过多评论简短说一句,某些产品经理简直就是脑抽,你们的专业知识不是为了糊弄你,也不是让你糊弄人。
如果一个很简单的事情一定要用什么什么理论,什么什么现象来解释,我只能说,你的脑子已经被奴役了。
ok进入正题。自定义动画(继承AnimationBase)本次不予讨论哈。
等你看完MSDN的文档或我的说明,你会觉得,只要时间够。你可以创造出你想创造的任何动画。
当然,那个时间够的前提,恩,不知道多少算够就是了。。。

 

一,概述

很多人觉得用blend生成一个动画好像是一件很简单的事情,我觉得那样极其没有技术含量,并且会让思维迅速僵化。
作为一个非专业非资深的无证程序员,我只想建议呢,大家有机会还是从代码出发了解Storyboard的前世今生吧~

基础元素类型:

1,DoubleAnimation:明显就是一个判断Double值,对Double值进行处理的一个动画过程。这是动画的基本构成元素。
2,PointAnimation:这..就是一个点了,我可以用这个做出很多点的move,cool。
3,ColorAnimation:这个明显就是改变颜色,当然这个没有point和double那种流动的feel,无法动画起来,只是一个change。

变换方式:

1,关键帧:UsingKeyFrames,对关键点进行处理,其他的交给后台系统自己解决。你标注出关键的位置,指定处理函数。ok,系统处理剩下的。
2,路径形式:UsingPath,显而易见了,就是你指定一个几何路径。
3,自定义:Base,创建自定义动画,这个有点太高深了,不是太高的要求,系统给的还是都能搞定的,毕竟我们不是专业做动画。

Timeline:

这个东东就这样了,时间线,控制动画播放的时间,指定Duration 或者指定Key的time都能很好掌控。
设置AutoReverse会让他自己返回,也就是回到初始状态,似乎没办法让动画单向的返回。只能播放一个轮回。
设置RepeatBehavior可以指定重复次数,里面有几种type自己摸索吧。

TargetName以及TargetProperty:

顾名思义。

EventTrigger和Begin方法:

实现动态的可掌控的动画触发。可以通过EventTrigger把动画赋值给一个ButtonClick之类的Event;
当然StoryBoard类还具有类似Stop,Pause,Resume之类的方法。
但是注意Stop之后动画对所有属性进行的更改全部会回到动画以前的状态,需要避免落差,请看下文。

FillBehavior:

就像你打开的某个程序正在读写一个文件流,然后你就无法操作那个文件了一样。
StoryBoard在设置FillBehavior为Filling后(动画结束默认自动设置为Filling),你无法对其TargetProperty进行更改,即使是Stop了也不能。
解决办法有三个,我比较喜欢使用第一种方法:

1,声明时调整FillBehavior 为Stop;
2,移除该StoryBoard;
3,代码中重新BeginAnimation,保持原来的TargetProperty,但是将第二个参数Timeline置为null即可释放。

但是有的情况FillBehavior值的设定却不起作用了,详情见下文。

HandOffBehavior:

如果有两个动画,第二个接上第一个直接播放,第一个动画未触发停止事件,这时会考虑到HandOffBehavior为SnapshotAndReplace 的情况。
第一个的FillBehavior的设置失效,也就是说,即使你想要那个你设置第一个SB的FillBehavior为Stop,想要你的的Property回到开始状态,不被第一个动画更改,他都回不去了。而第二个动画会直接在第一个动画后进行效果的叠加,初始值变成了第一个动画末尾的状态。解决办法让第一个动画停止之后,再执行第二个动画。
另外,该值可以被置为Compose,也就是Append模式。我的理解是在第一个动画完成后再播放第二个,并未测试。

垃圾回收:

动画一定要记住垃圾回收,不然他会一直占用时钟资源。至少离开页面请停止动画的播放。不然就得等到那个页面被回收。

 

二,动画类型入门

From/To/By

很好,我们再来顾名思义一下。这个是可以应用在很多种类动画中的一个方式,很常见。可以作为Attribute设置在某个Animation的Xaml里面,也可以代码指定。
属性名称 <*Animation> *为操作元素,可以操作的元素也相当之多。MSDN有一张大表如下:

 

 

 

1,From也就是起始值,指定这个动画的起始值。一般要搭配To,只指定该值,他会默认以该属性基值为To的目标。
2,To也就是终止值,如果不搭配From。则直接由当前点作为起始值,而运行到To的目标值。
3,By相对位移。相对于开始值的位移,指定From时初始值为From的值,未指定From值时,初始值为当前状态值。

KeyFrameAnimation

下面来到关键帧动画,不同于FTB动画。关键帧重点在于设置关键帧的参数。其他的交给系统处理。和FTB一样支持很多元素,离散,线性,样条插值看各自情况。
属性名称是 <*AnimationUsingKeyFrames> 操作元素见上表。

1,插值方式:离散插值动画为跳变形式,线性则是缓慢,而样条则采用贝赛尔曲线,指定控制点值进行动画处理。
2,TimeSpan:timespan有很多形式,Uniform 和百分比可以让你的动画动态赔时间,而不是简单的Duration。

PathAnimation

路径动画很有意思,他的输入是一个PathGeoMetry,一个几何的绘图。根据这个几何绘图配合Timeline产生出很棒的动画效果。
属性名称是 <*AnimationUsingPath> 操作元素见一表。这个部分最大的难点可能就在于几何图像的绘制了,其他部分大同小异。

EasingFunction

各种各样的缓动函数大家在blend里面观摩设置即可,我就不说这块了。

三,Tips

这部分是我个人看了MSDN动画说明部分,针对自己的一些小贴士了;

1,动画的触发可以用DataTrigger数据改变触发,Trigger属性改变触发,EventTrigger事件触发等。
2,颜色也是可以线性改变的。用线性的LinearColorAnimation即可
3,Freezable对象可以注册后动画,或者间接访问。
4,动画的AccelerationRatio和DecelerationRatio属性可以对动画播放进行加减速处理。
5,动画的IsCumulative属性可以设置重复过程中是否累加值。
6,动画的IsAdditive属性可以让From To动画变成ToTo动画哈哈,就是将From设置为当前值的偏移值作为起点。
7,Button指定Trigger还能直接对SB进行播放暂停停止等动作。
8,如果一个对象包含多个动画,可以使用子时间线添加到SB中便于逻辑和测试。
9,时钟变化是有触发的,不过没特别的需求时不需要对时间变化进行维护。
10,要做严谨的动画很难,但是要做一个能看得过去的动画很简单。到此吧。

四,相关链接

http://msdn.microsoft.com/zh-cn/library/ms752312.aspx

http://msdn.microsoft.com/zh-cn/magazine/cc189019(VS.95).aspx

posted @ 2011-08-07 17:03  akita  阅读(563)  评论(2编辑  收藏  举报