WPF中的动画——(三)时间线(TimeLine)
时间线(TimeLine)表示时间段。 它提供的属性可以让控制该时间段的长度、开始时间、重复次数、该时间段内时间进度的快慢等等。在WPF中内置了如下几种TimeLine:
- AnimationTimeline :前面已经介绍过,主要用于属性的过渡,这种是最常见的动画。
- MediaTimeline:用于控制媒体文件播放的时间线。
- ParallelTimeline:ParallelTimeline 是一种可对其他时间线进行分组的时间线,可用于实现较复杂的动画。
- Storyboard :一种特殊的 ParallelTimeline,可为其包含的时间线提供对象和属性目标信息。在XAML中经常使用到它,在后面再专项介绍。
常用属性:
- Duration: 动画播放时间长度
- RepeatBehavior: 重复行为(重复次数)
- FillBehavior: 动画结束后的行为(保持动画的结束状态或恢复到初始状态)
- AutoReverse: 按相反的顺序重复播放动画
- SpeedRatio: 动画播放速率(用于加速或减速播放)
- BeginTime: 动画播放的起始时间
时间线控制:
到目前为止,我们虽然能创建并执行动画,但仅仅能通过UIElement. BeginAnimation执行开始动画,还无法对动画进行交互控制。在WPF中,还提供了一系列对时间线的控制操作,如:开始、停止、暂停等。它们是通过Clock对象的Controller属性来进行的。下面就是一个简单的示例:
var widthAnimation = new DoubleAnimation() { From = 0, To = 320, Duration = TimeSpan.FromSeconds(5), };
var clock = widthAnimation.CreateClock(); button.ApplyAnimationClock(WidthProperty, clock);
await Task.Delay(3000); clock.Controller.Pause();
从这个代码中可以看出,控制时间线的一般步骤如下:
- 通过CreateClock函数创建时钟对象Clock
- 通过UIElement. ApplyAnimationClock函数启用支持时钟控制的动画
- 使用Clock. Controller的方法控制动画
更加详尽的例子可以参看MSDN文档:以交互方式控制时钟
除了在Controller中提供了交互方法以为,Clock对象还提供了一系列属性和事件方便我们的获取状态,常见的有:
- CurrentProgress 当前进度
- CurrentState 当前状态
- CurrentTime 当前播放时间
- IsPaused 是否处于暂停状态
- NaturalDuration 动画持续时间
也提供了一系列事件来主动通知状态的变更,常用的事件为:
- Completed:动画结束时的通知
- CurrentGlobalSpeedInvalidated 播放速率变化时的通知,
- CurrentStateInvalidated 状态变化时的通知
- CurrentTimeInvalidated 播放时间变化时的通知
- RemoveRequested 动画移除时候的通知
这几个事件在TimeLine对象中也是有的,这样,在不使用Clock对象的时候也可以或者这些状态的变化。 如果想更加收入的理解计时系统的工作方式,可以看看动画和计时系统概述一文。
另外,有的特殊的TimeLine对象,如Storyboard本身就封装了动画的控制相关内容,可以直接对动画进行控制。关于Storyboard需要介绍的内容比较多,后面再单独写文章介绍。
参考资料:
WPF中的动画——(三)时间线(TimeLine)的更多相关文章
- 【WPF学习笔记】[转]周银辉之WPF中的动画 && 晓风影天之wpf动画——new PropertyPath属性链
(一)WPF中的动画 动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式 ...
- [转]WPF中的动画
WPF中的动画 周银辉 动画无疑是WP ...
- WPF中ItemsControl应用虚拟化时找到子元素的方法
原文:WPF中ItemsControl应用虚拟化时找到子元素的方法 wpf的虚拟化技术会使UI的控件只初始化看的到的子元素, 而不是所有子元素都被初始化,这样会提高UI性能. 但是我们经常会遇到一个 ...
- WPF中的动画——(六)演示图板
前面所介绍的都是单一的动画,它只能修改单一属性.有的时候,我们需要将一组动画一起进行,对于一个按钮,我们可能有如下需求: 选择该按钮时,该按钮增大并更改颜色. 单击该按钮时,该按钮缩小并恢复其原始大小 ...
- WPF中的动画——(五)关键帧动画
与 From/To/By 动画类似,关键帧动画以也可以以动画形式显示目标属性值. 和From/To/By 动画不同的是, From/To/By 动画只能控制在两个状态之间变化,而关键帧动画则可以在多个 ...
- WPF之小动画三
如果前两篇的博客太为普通,那么接下来的内容将让你动画实在是太厉害了.本文将会介绍两个关于纯手工实现动画的形式,当然动画效果就不用我多说了. 基于帧的动画: 此处的帧并不是之前介绍的Animation这 ...
- (转载)WPF中的动画——(一)基本概念
http://www.cnblogs.com/TianFang/p/4050845.html WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计 ...
- WPF中的动画
动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式来编写动画,为了对St ...
- WPF中的动画——(一)基本概念
WPF的一个特点就是支持动画,我们可以非常容易的实现漂亮大方的界面.首先,我们来复习一下动画的基本概念.计算机中的动画一般是定格动画,也称之为逐帧动画,它通过每帧不同的图像连续播放,从而欺骗眼和脑产生 ...
随机推荐
- Nodejs - 如何用 eventproxy 模块控制并发
本文目标 本文的目标是获取 ZOJ 1001-1010 每道题 best solution 的作者 id,取得数据后一次性输出在控制台. 前文 如何用 Nodejs 分析一个简单页面 我们讲了如何用 ...
- red hat关于桥接模式连不上外网或者没有IP
很多人·在启动虚拟机后连接不上外网,即ifconfig没有ip地址,我总结了一下需要注意的地方: 以下全是在桥接模式. 1.在windows中打开任务管理器-->服务中找到一下几个服务,确保它们 ...
- Linux系统概述
1.Linux是一套免费使用 和自 由传播的类Unix操作系统. 这个系统是由世界各地的成千上万的程序员 设计和实现的.其目 的是建立不受任何商品化软件的版权制约的. 全世界都能自 由使用的Unix兼 ...
- Linux ext3 ext4 区别
Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4. Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只 ...
- 在写junit test 的时候出现的java.lang.UnsupportedClassVersionError问题
今天在写为一些project 写 一些junit test 的时候,出现下面的异常: java.lang.UnsupportedClassVersionError: moneytest/Money ...
- mysql中binlog_format模式与配置详解
mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...
- 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ Tab功能扩展完结版)
一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得上一篇文章吗.主要讲述了一个“Tab”插件是如何组织代码以及实现的”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方 ...
- 关于使用 no-js (Modernizr)
最近有些朋友问到:为什么我的网页 code 有 class="no-js" ? <!DOCTYPE html> <html dir="ltr" ...
- 【转载】使用Pandas创建数据透视表
使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...
- Android通过名称找图片
开发中往往会遇到这种情况:在Drawable文件夹中有若干张相似的图片(这里的相似指的是不仅图片名称相似,用途也相似),现在要根据用户的某个操作选出其中的一张.例如,在类似微信语音功能的开发中,按住“ ...