设为首页 加入收藏

TOP

17.7.1 动画
2013-10-07 01:06:56 来源: 作者: 【 】 浏览:78
Tags:17.7.1 动画

17.7  特殊效果

窗口服务器为应用程序提供许多有用的特殊效果。包括如下几种:

后台备份窗口;

动画;

调试键的使用;

使用控件上下文;

滚动;

透明窗口。

后台备份窗口已经在第15章中讨论过。这一节将依次介绍剩下的效果。 这些特殊效果的细节取决于使用的特殊用户接口。比如透明窗口,需要系统支持;即使两个设备运行相同的用户接口,可能一个支持另一个不支持。

17.7.1  动画

有时候,希望进行一些绘制,其同步性成为视觉效果的重要特征。它与 MVC 范例并不能真正匹配,因此必须提供特殊的支持。

在GUI中,使用某种动画给出将要发生动作的可靠提示。

如果在对话框中选择OK按钮,甚至使用键盘时,OK按钮在很短时间内处于按下状态(实际上约0.2秒),然后发生相应动作。

如果使用触笔来选择菜单项目,在菜单栏消失和命令执行之前,该项目看起来以某种细微的方式短暂地闪烁。

在这两种情形下,这种动画使人确信所选择的动作实际上发生了。或者,同样重要的是,它警告我们不打算进行的某件事实际上有发生的可能性。对任一种方式,动画都是极其重要的暗示;没有它,将会觉得Symbian操作系统GUI没有这么容易使用。

其实,动画不是发生某件事的唯一可能的暗示。声音,比如键或数字转换器的点击声,也会有帮助。

1.使用flush命令 实现这种动画非常简单。比如,对于对话框按钮动画:

发出绘制命令,将按钮绘制为“按下”状态;

刷新窗口服务器客户端缓冲,使绘制命令执行;

应用程序等待0.2秒;

消除对话框,发生相关的操作—很可能这将导致发生更多的绘制动作。

这里的关键之处是刷新和等待序列。CONE 提供 CCoeEnv::Flush()函数来实现该功能,该函数在以微秒为单位的时间间隔内完成。因此,以下的代码实现刷新和等待。

  1. iCoeEnv->Flush(200000); 

刷新至关重要。没有它,窗口服务器可能不会执行绘制命令,直到下一次调用活动调度器,等待一个新的事件,换句话说,直到对当前键的处理结束为止。到那时,已消除了对话框,使绘制命令将被“无闪烁”地执行,但恰好发生在闪烁应该发挥作用的地方!

不要使得使用这一命令的等待时间多于 0.2 秒。如果这样,将降低应用程序的响应灵敏度。整个应用程序线程及其所有活动对象都在这 0.2 秒的等待期间挂起。如果需要在更长的时间范围内出现动画,则使用活动对象来处理动画任务。

2.使用活动对象

在某些场合,使用活动对象的动画也不理想,因为活动对象是以非抢占方式进行调度,而且特别是在应用程序代码中,不能确认活动对象事件处理函数将花费多长时间来运行。某些动画必须一直保持运行,否则看起来会很别扭。例如,文本光标的闪烁、位于应用程序按钮栏底部的模拟时钟和数字时钟。当程序正在运行时间特别长的事件处理器时,所出现的繁忙消息将(根据定义)阻止其他活动对象的运行。

在窗口服务器动画DLL中,所有这些动画作为窗口服务器的一部分而运行。这要求它们是窗口服务器的良好运行部分,并有运行时间非常短暂的活动对象。参考第6章关于活动对象的详细描述。  

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇17.7.4 滚动 下一篇17.9.2 应用程序中与尺寸和目标无..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: