Tizen 开发 - UI:Scene Management

来源:互联网 发布:王牌特工2 知乎 编辑:程序博客网 时间:2024/06/09 21:00

一个scene是UI跳转的基本单元,包括一个form和一个panel,或只有一个form。

1. functions

1)管理form的生命周期,管理forms或者panels的跳转;

2)管理scene的变换;

3)为forms或panels的跳转增加动画。

2. 注册所有的scenes

1)实现 Tizen::Ui::Scenes::IFormFactory和 Tizen::Ui::Scenes::IPanelFactory,并为forms和panels指定特定的ID;

class MyFormFactory:   public Tizen::Ui::Scenes::IFormFactory 

class MyPanelFactory:   public Tizen::Ui::Scenes::IPanelFactory 


static MyFormFactory myFormFactory;myFormFactory.Construct();static MyPanelFactory myPanelFactory;myPanelFactory.Construct();static MyPolicyProvider myPolicyProvider;pSceneManager->RegisterFormFactory(myFormFactory);pSceneManager->RegisterPanelFactory(myPanelFactory);

2)在OnAppInitializing中使用RegisterScene注册所有的scenes。

SceneManager* pSceneManager = SceneManager::GetInstance();pSceneManager->RegisterScene(L"InitialScene", L"InitialForm", L"");pSceneManager->RegisterScene(L"MainContactsListScene", L"MainForm", L"ContactsListPanel");pSceneManager->RegisterScene(L"MainGroupsListScene", L"MainForm", L"GroupsPanel");pSceneManager->RegisterScene(L"MainFavouritesListScene", L"MainForm", L"FavouritesListPanel");pSceneManager->RegisterScene(L"DetailScene", L"DetailForm", L"");

3. Scene历史和生命周期
1)General Forward and Backward Transitions
SCENE_HISTORY_OPTION_ADD_HISTORY 保证当前的scene能进入scene历史。

2)Forward Transition with Transition Options
SCENE_DESTROY_OPTION_KEEP 保证当前的scene alive,除非被显示的destroy掉,

SCENE_HISTORY_OPTION_NO_HISTORY and SCENE_DESTROY_OPTION_DESTROY 可以保证当前的scene不进入scene历史。

3)Backward Transition to an Adjacent or Non-adjacent Scene
为GoBackward指定ID可以跳转回指定的scene,他们之间的scene会被释放掉。

4)Tab-style Panel Transitions

5)可以通过GetHistoryN() 和 AddToHistory() 来备份存储应用的scene 历史,这对于重新launch应用时有用。

6)可以实现Tizen::Ui::Scenes::ISceneManagerEventListener 并使用scene manager注册;每个scene也可以通过实现Tizen::Ui::Scenes::ISceneEventListener来接收scene 转换的事件,这个监听只能用在当前要创建的scene上。
       OnSceneDeactivated() 和 OnSceneActivatedN()在scene转换过程中被调用;
7)使用  Tizen::Ui::Scenes::ISceneTransitionPolicyProvider 来manage predefined UI scene switching scenarios。
class MyPolicyProvider:   public Tizen::Ui::Scenes::ISceneTransitionPolicyProvider

Tizen::Base::String MyPolicyProvider::GetNextScene(const Tizen::Base::String& currentSceneId, const Tizen::Base::Collection::IList* pArgs){   String nextSceneId(L"");   if (currentSceneId == L"InitialScene")      nextSceneId = L"MainContactsListScene";   return nextSceneId;}

void MainForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId){   result r = E_SUCCESS;   SceneManager* pSceneManager = SceneManager::GetInstance();   switch (actionId)   {      case ID_BUTTON_1:         r = pSceneManager->GoForward(ForwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_NONE,                                      SCENE_HISTORY_OPTION_NO_HISTORY));         break;      default:         break;   }}


原创粉丝点击