1、前言
當(dāng)用戶界面層數(shù)較多時(shí),通過(guò)層層回歸的方式返回主頁(yè)不夠方便;如果在每個(gè)頁(yè)面都設(shè)置一個(gè)返回按鈕,又會(huì)增加 UI 設(shè)計(jì)復(fù)雜度。
如果使用一個(gè)物理按鍵作為 Home 鍵,無(wú)論處于任何界面,都可通過(guò)這個(gè)按鍵返回到主頁(yè);此物理按鍵僅需要一個(gè) GPIO。下面介紹通過(guò) TouchGFX 實(shí)現(xiàn)此功能的原理及方法。
2、實(shí)現(xiàn)原理
TouchGFX 基本架構(gòu)為 Model-View-Presenter(MVP)(參考以下章節(jié)的鏈接 ModelView-Presenter 設(shè)計(jì)模式 | TouchGFX Documentation 獲取更多信息),Model 類(lèi)具有指向當(dāng)前活動(dòng)的 Presenter 指針。當(dāng) Model 檢測(cè)到變化時(shí),會(huì)將變化通知當(dāng)前活動(dòng)Presenter,上述動(dòng)作通過(guò) ModelListener 接口中的方法來(lái)完成。
對(duì)于通過(guò)按鍵返回主頁(yè)的需求,我們可以在 Model 中檢測(cè)按鍵的變化,由于 Model 類(lèi)具有指向當(dāng)前活動(dòng)的 Presenter 指針,因此可以將按鍵的變化通過(guò) ModelListener 通知給當(dāng)前活動(dòng) Presenter,Presenter 調(diào)用對(duì)應(yīng) View 中的屏幕切換方法,即可實(shí)現(xiàn)立即回歸主頁(yè)。由于存在多個(gè) Presenter,因此在按鍵觸發(fā)的時(shí)刻,活動(dòng)的 Presenter 可能是任何一個(gè);所以除主頁(yè)之外,其余 Presenter 都要單獨(dú)實(shí)現(xiàn)對(duì)應(yīng) View 中切屏方法的調(diào)用。
3、實(shí)現(xiàn)方法
假設(shè)我們共有三屏內(nèi)容,Screen1 為主頁(yè),另外兩屏為 Screen2 和 Screen3。
(1) 對(duì)按鍵 IO 進(jìn)行初始化設(shè)置。
(2) 在 ModelListener.hpp 中實(shí)現(xiàn)一個(gè)處理切屏的虛函數(shù)。
(3) 在 Model 中實(shí)現(xiàn)當(dāng)按鍵按下時(shí)通過(guò) modelListener 調(diào)用這個(gè)函數(shù)。
(4) 在 Screen2View.hpp 中實(shí)現(xiàn)實(shí)際處理切屏的方法。
(5) 在 Screen2Presenter.hpp 中 class Presenter 的派生類(lèi) class Screen2Presenter中聲明與 ModelListener.hpp 中虛函數(shù)同名的函數(shù)名(函數(shù)的多態(tài))。
(6) 在 Screen2Presenter.cpp 中對(duì)這個(gè)函數(shù)進(jìn)行重寫(xiě),并實(shí)現(xiàn)對(duì)應(yīng) view 中實(shí)際切屏方法的調(diào)用。
(7) 對(duì)于 Screen3 或有更多的 Screen,如上述 Screen2 的(4)、(5)、(6)相關(guān)操作,這樣在按鍵按下時(shí),無(wú)論哪個(gè) Screen 處于有效狀態(tài),都能執(zhí)行相關(guān)的切屏操作。如果希望在某個(gè)頁(yè)面中 Home 鍵不觸發(fā)切屏操作,只需在其對(duì)應(yīng)的 Presenter和 View 中不做處理即可。
另外,在 View 中實(shí)現(xiàn)切屏是調(diào)用 changeToStartScreen()實(shí)現(xiàn)的,這種方法沒(méi)有動(dòng)畫(huà)效果;如果想加入動(dòng)畫(huà)效果,如以 Wipe 的方式從下方切入,可以在 TouchGFX Designer 的主頁(yè) Screen1 中添加一個(gè)不帶 Trigger 的 Interaction,將 changeToStartScreen()替換成FrontedApplicationBase.cpp 中的切屏方法 gotoScreen1ScreenWipeTransitionSouth(),即可將切屏效果帶入。
4、總結(jié)
本文闡述了如何基于 TouchGFX 的 MVP 架構(gòu),實(shí)現(xiàn)物理 Home 按鍵控制返回主頁(yè)的功能及方法。通過(guò)這一實(shí)際應(yīng)用案例,可以讓用戶更深入的理解 MVP 的設(shè)計(jì)模式。