Symbian 实现基于传统架构场景切换动画
2010-03-07 19:40:00 来源:WEB开发网简介
在symbian界面开发中,我还是比较喜欢实用基于传统结构(Constructing views in traditional architecture)设计界面,虽然这样做比较繁琐,界面基本上是自己画出来的,但是,这样做的灵活性很高,基本可以实现任何自己想要的界面。一般每一个界面都是一个CCoeControl的对象,通过MakeVisible(TBool)来设置其可见或者隐藏。这样切换当然是很生硬的,如果能在切换的时候加一个转换效果,自然好多了,现在很多软件都有场景切换动画的。可以是滑入滑出,淡入淡出等等!
在基于传统ui架构的模式下,如何切换显示界面
一般切换界面的方法为设置当前界面MakeVisible(EFalse),下一界面MakeVisible(ETRue),还要管理堆栈,以便于响应键盘按键:
CCoeControl * iControl1;
CCoeControl * iControl2;
// Construct
..
iControl2->MakeVisible(ETrue);// show
iControl1->MakeVisible(EFalse);// hide
CAppUI * appui = CEikonEnv::Static()->EikAppUi();
// 注意,这里的CAppUI是你程序的UI类
appui->AddToStackL(iControl2);// 添加到栈中
appui->RemoveFromStack(iControl1);// 移除出栈
..
CCoeControl * iControl1;
CCoeControl * iControl2;
// Construct
..
iControl2->MakeVisible(ETrue);// show
iControl1->MakeVisible(EFalse);// hide
CAppUI * appui = CEikonEnv::Static()->EikAppUi();
// 注意,这里的CAppUI是你程序的UI类
appui->AddToStackL(iControl2);// 添加到栈中
appui->RemoveFromStack(iControl1);// 移除出栈
..
实现场景切换动画的原理
实现场景切换动画,当然需要前后界面的截图,在这两张图上面做文章就可以了,然而,要如何获得这两张图确是个问题,前面这个界面的截图还可以通话获屏幕截图的方法来实现,然而,第二个界面呢?还没有画到界面上的,使用前面的方法是做不到的,我们不能先画到屏幕上,再来截图的。
ps。。既然说到获得屏幕截图,就写一下获得屏幕截图的方法吧:
// Get the screen device
CWsScreenDevice * iScreenDevice = CCoeEnv::Static()->ScreenDevice();
更多精彩
赞助商链接