0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)戰(zhàn)經(jīng)驗(yàn) | STM32GUI TouchGFX 屏幕切換功能簡(jiǎn)介

STM32單片機(jī) ? 來(lái)源:未知 ? 2023-11-09 10:05 ? 次閱讀


關(guān)鍵詞:GUI,TouchGFX,Transition


目錄預(yù)覽

1、引言

2、TouchGFX屏幕切換功能

3、小結(jié)


01

引言


TouchGFX 是專(zhuān)用于 STM32 的圖形界面設(shè)計(jì)軟件,可基于低成本開(kāi)發(fā)優(yōu)秀的圖形界面,而且它已變的越來(lái)越流行。為了幫助客戶(hù)更加深入地理解和使用 TouchGFX ,本文針對(duì)TouchGFX 屏幕切換的實(shí)現(xiàn)方式進(jìn)行了介紹。通過(guò)簡(jiǎn)析基本例程“Transition Example”的源碼,剖析其中切屏實(shí)現(xiàn)的流程;并簡(jiǎn)介了如何使用 TouchGFX Designer 快捷地修改屏幕切換模式,希望能幫助客戶(hù)更好地使用 TouchGFX 切屏特色與功能。


02

TouchGFX屏幕切換功能


2.1. TouchGFX Transition 類(lèi)介紹


TouchGFX 框架中關(guān)于屏幕切換功能,實(shí)現(xiàn)了一個(gè) Transition 基類(lèi)和五個(gè)派生類(lèi),其關(guān)系如下圖圖 1 所示。其中,Transition 是切屏的抽象基類(lèi),定義了屏幕切換期間發(fā)生的基本事務(wù)。虛函數(shù)主要包括:Init(初始化)、tearDown(銷(xiāo)毀,切屏完成需要的清理過(guò)程)、handleTickEvent(Tick 事件處理函數(shù),主要用于完成切屏的動(dòng)畫(huà)效果)、invalidate(失效,用于重繪)等。五個(gè)派生類(lèi),其中 NoTransition 是最基本的派生類(lèi),它沒(méi)有任何視覺(jué)效果,當(dāng)前屏幕會(huì)直接被新屏內(nèi)容替換。另外四個(gè)派生類(lèi)則具有動(dòng)畫(huà)效果:BlockTransition、CoverTransition、SlideTransition 和 WipeTransition。


圖1.TouchGFX Transition 類(lèi)繼承關(guān)系


BlockTransition 將屏幕分成 8x6 份塊,在屏幕切換時(shí)會(huì)每次隨機(jī)重繪其中的 2 個(gè)塊,比較節(jié)省 MCU 資源,適合性能不高的 MCU;CoverTransition 的動(dòng)畫(huà)效果是“新屏畫(huà)面從一個(gè)方向移動(dòng)過(guò)來(lái),直至完全覆蓋原屏幕內(nèi)容”;SlideTransition 的動(dòng)畫(huà)效果是“新屏與原屏拼接在一起,(原屏在前,新屏在后)從指定的方向滑過(guò)來(lái)”;WipeTransition 的動(dòng)畫(huà)效果是“新屏內(nèi)容從一個(gè)方向展開(kāi)(有一種擦除原屏,露出新屏的效果)”。BlockTransition、CoverTransition、SlideTransition 和 WipeTransition 均在 handleTickEvent 函數(shù)中實(shí)現(xiàn)各自風(fēng)格的動(dòng)畫(huà)效果,tearDown 函數(shù)中則銷(xiāo)毀切屏過(guò)程中創(chuàng)建的用于動(dòng)畫(huà)的臨時(shí)快照控件等。下面我們首先生成Transition 例程,并對(duì)例程源碼相關(guān)部分做進(jìn)一步的分析。


2.2. TouchGFX Transition 例程


運(yùn)行 TouchGFX Designer,選擇 Examples;通過(guò) Select Board Setup 選擇 STM32H735G DK 板(也可以是 TouchGFX 適用的其它板件);從眾多例程中選擇“Transition Example”例程;將 Application name 改為 Transition_Example,如下圖圖 2 所示,然后點(diǎn)擊 Create 創(chuàng)建工程。


圖2.TouchGFX Designer 生成 Transition Example 例程


進(jìn)入 TouchGFX Designer 主界面后,會(huì)看到畫(huà)布上有四個(gè)方向按鈕和一個(gè)背景圖片,如下 圖圖 3 所示。我們對(duì)界面不做更改,直接選擇 Designer 右下角 (Run Target)在目標(biāo)板上運(yùn)行。該操作將會(huì)復(fù)制 TouchGFX 框架文件,生成配置文件、makefile、代碼及資源文件(images、fonts、texts),然后編譯鏈接、燒錄目標(biāo)板并運(yùn)行。程序運(yùn)行起來(lái)后,您可以熟悉一下該例程應(yīng)用,該應(yīng)用有 5 個(gè)屏幕畫(huà)面,一個(gè)主屏及上下左右 4 個(gè)屏幕。點(diǎn)擊方向按鈕會(huì)進(jìn)行相關(guān)方向的切屏。例程中切屏方式是 SlideTransition 模式。下面我們解讀一下相關(guān)代碼,再對(duì)Transition 模式進(jìn)行修改。


圖3.TouchGFX Designer Transition Example 設(shè)計(jì)界面


2.3. 例程代碼解讀與切屏模式修改


2.3.1. 關(guān)鍵代碼流程


切屏操作是由點(diǎn)擊按鈕觸發(fā)的,我們以右向按鈕 為例,一步步查看調(diào)用過(guò)程。首先我們可以確定當(dāng)前屏幕是 MainView 類(lèi),MainView 繼承自 MainViewBase,該 MainViewBase 由Designer 自動(dòng)生成。它已經(jīng)包含了四個(gè)按鈕、一個(gè)背景框和一個(gè)背景圖片。按鈕點(diǎn)擊的處理函數(shù)為 buttonCallbackHandler。詳細(xì)代碼如下:



我們?cè)賮?lái)看該按鈕處理函數(shù),這里右向按鈕調(diào)用了 application 對(duì)象的gotoRightScreenSlideTransitionEast 函數(shù):



在 FrontendApplicationBase 中,gotoRightScreenSlideTransitionEast 接口通過(guò)transitionCallback 跳轉(zhuǎn)到 gotoRightScreenSlideTransitionEastImpl 函數(shù)。具體過(guò)程,首先application 事務(wù)處理過(guò)程中會(huì)調(diào)用 handlePendingScreenTransition,再轉(zhuǎn)至函數(shù)evaluatePendingScreenTransition,經(jīng) transitionCallback 完成對(duì)函數(shù)gotoRightScreenSlideTransitionEastImpl 的調(diào)用(更多的關(guān)于 Callback 的介紹請(qǐng)參閱相關(guān)文檔或 LAT)。如下圖圖 4 所示:


圖4.Transition Callback 的應(yīng)用過(guò)程


具體代碼如下:



函數(shù) gotoRightScreenSlideTransitionEastImpl 中調(diào)用了屏幕切換的關(guān)鍵模板函數(shù)makeTransition。


2.3.2. 模板函數(shù) makeTransition


下面我們來(lái)看一看實(shí)現(xiàn)屏幕切換功能的關(guān)鍵模板函數(shù) makeTransition。該函數(shù)在MVPApplication.hpp 中,源碼如下:



我們知道 TouchGFX 應(yīng)用架構(gòu)是 MVP 架構(gòu)(這里不做過(guò)多介紹,需要了解的客戶(hù)請(qǐng)參考相關(guān)文檔),這里的 makeTransition 函數(shù)將 TouchGFX 應(yīng)用中的 View&Presenter 和 model 綁定,并與 transition 聯(lián)系在一起,進(jìn)而實(shí)現(xiàn)切屏功能。具體來(lái)說(shuō),首先 prepareTransition 函數(shù)對(duì)當(dāng)前的 View/Presenter/Transition 進(jìn)行銷(xiāo)毀;然后以模板參數(shù) touchgfx::SlideTransition(用戶(hù)指定的方向)創(chuàng)建 Transition 派生類(lèi)對(duì)象;以模板參數(shù) ScreenType 類(lèi)進(jìn)行新 View 的創(chuàng)建(這里是 RighView);再以模板參數(shù) PresenterType 類(lèi)創(chuàng)建新的 Presenter(這里是RightPresenter)。將 Presenter 與 Model 綁定并將 View 與 Presenter 綁定(以保證可以正常調(diào)用各自接口,實(shí)現(xiàn) MVP 架構(gòu)功能);最后調(diào)用 finalizeTransition 函數(shù),在 finalizeTransition 中進(jìn)行新 View 的 SetupScreen,綁定新 Transition, 并激活新 Transition。


2.3.3. Transition 動(dòng)畫(huà)效果的實(shí)現(xiàn)


具體的 Transition 動(dòng)畫(huà)效果是在 Transition 派生類(lèi)的 handleTickEvent 中實(shí)現(xiàn)的。我們例程中是 SlideTransition,其 handleTickEvent 中實(shí)現(xiàn)了滑動(dòng)的效果。將原有屏幕的快照,在滑動(dòng)方向的來(lái)向上與新 View 的快照連接,一起沿滑動(dòng)方向移動(dòng),實(shí)現(xiàn)動(dòng)畫(huà)效果。具體請(qǐng)見(jiàn)下面handleTickEvent 函數(shù)源碼:



2.3.4. Transition 風(fēng)格的修改


模板配合 C++編程給予了 TouchGFX 框架極大的簡(jiǎn)潔性和適配的便利性,對(duì)于切屏風(fēng)格的增加或修改也是非常的簡(jiǎn)便??蛻?hù)甚至不需要理解前面介紹的 Transition 具體原理,也能夠非常方便地修改切屏模式。使用 TouchGFX Designer,僅需點(diǎn)擊幾下鼠標(biāo)即可實(shí)現(xiàn)。如下圖圖 5 所示,這里我們?cè)陉P(guān)聯(lián)右向按鈕的 Interaction 中,將 Transition 模式改為了 Wipe 模式,編譯運(yùn)行即可查看效果。


圖5.TouchGFX Designer Transition 模式的修改


03

小結(jié)


TouchGFX 是針對(duì) STM32 產(chǎn)品的專(zhuān)用優(yōu)秀界面設(shè)計(jì)工具,功能強(qiáng)大易用。本文對(duì)屏幕切換功能進(jìn)行了簡(jiǎn)介,從基本示例“Transition Example”出發(fā),對(duì)切屏部分的源代碼進(jìn)行了淺析,并介紹了如何使用 TouchGFX Designer 實(shí)現(xiàn)切屏模式的修改。希望本文能夠幫助客戶(hù)更深入地理解 STM32 TouchGFX。



完整內(nèi)容請(qǐng)點(diǎn)擊“閱讀原文”下載原文檔。



原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | STM32GUI TouchGFX 屏幕切換功能簡(jiǎn)介

文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635355
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    356046

原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | STM32GUI TouchGFX 屏幕切換功能簡(jiǎn)介

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    七大嵌入式GUI盤(pán)點(diǎn)

    市場(chǎng)的專(zhuān)業(yè)、通用GUI,可用于多種不同的場(chǎng)景。 TouchGFX 屬于Draupner Graphics公司的GUI產(chǎn)品,以炫酷的界面著稱(chēng),在2018年7月,TouchGFX被S
    發(fā)表于 09-02 10:58

    TouchGFX 中 MCU 負(fù)載的計(jì)算過(guò)程介紹

    TouchGFX Desinger 下載的 TBS(TouchGFX Board Setup)大都帶有 MCU 的 負(fù)載計(jì)算功能,那么如何在自己的板子上增加 MCU 負(fù)載計(jì)算功能
    的頭像 發(fā)表于 05-24 13:24 ?485次閱讀
    <b class='flag-5'>TouchGFX</b> 中 MCU 負(fù)載的計(jì)算過(guò)程介紹

    請(qǐng)問(wèn)STM32小容量的芯片能應(yīng)用GUI嗎?

    STM32F0系列的芯片能用上GUI嗎,不知道像emWIN,TouchGFX對(duì)于FLASH有什么具體要求。
    發(fā)表于 04-24 06:19

    stm32cubemx5.0,stm32l496G怎么沒(méi)有touchgfx選項(xiàng)?

    最新版的stm32cubemx5.0,stm32l496G怎么沒(méi)有touchgfx選項(xiàng),
    發(fā)表于 04-23 07:04

    STM32F769I-DISCO開(kāi)發(fā)板跑TouchGFX里的demo卡死黑屏的原因?

    買(mǎi)的官方的STM32F769-DISCO開(kāi)發(fā)板,下載SDK里的官方例程跑的很流暢。自己在TouchGFX上找到STM32F769-DISCO的demo后,生成的代碼、cubeMX配置、keil工程
    發(fā)表于 04-12 07:46

    TouchGFX G0設(shè)備如何使用物理按鍵切換頁(yè)面?

    我使用STM32 G070RBT6 + 320*240的SPI屏幕(無(wú)觸摸),想通過(guò)按鍵切換頁(yè)面,在TouchGFX中可以設(shè)置使用外部按鍵按下作為觸發(fā),但是我不知道我程序中在哪里告訴
    發(fā)表于 04-09 07:13

    STM32L476使用TouchGfx,編譯會(huì)爆空間的原因?

    現(xiàn)在工作需要在STM32L476上使用TouchGFX。 現(xiàn)在Flash 內(nèi)部是1M,RAM是128KB---屏幕分辨率是:800x480, 現(xiàn)在用cubeMX選擇這樣的分辨率,編譯會(huì)爆空間。
    發(fā)表于 04-09 06:38

    touchgfx掉電重啟后卡死無(wú)法顯示怎么解決?

    屏幕也不顯示,查看過(guò).map文件 圖片數(shù)據(jù)存儲(chǔ)在外部flash TouchGFX_Framebuffer設(shè)在內(nèi)部的RAM,想了好幾天也不知道問(wèn)題在哪里,望大佬解救
    發(fā)表于 04-08 07:37

    STM32L4R9移植touchgfx GUI顯示控件異常花屏的原因?

    移植touchgfx工程后 (1)開(kāi)啟GUI出顯示異常,問(wèn)題不能確定,懷疑是dma2d送數(shù)據(jù)不正確,目前未找到touchgfx的填充界面函數(shù)在那里??? (2)關(guān)閉GUI顯示函數(shù),直接
    發(fā)表于 04-07 08:30

    TouchGFX+STM32CUBEMX+STM32F429IGT6運(yùn)行異常的原因?怎么解決?

    使用touchgfx+stm32CubeMx生成適合正點(diǎn)原子阿波羅開(kāi)發(fā)板的工程文件不能正常運(yùn)行。首先使用cube生成了LTDC+DMA2D+FMC+FreeRTOS配置,正常點(diǎn)亮了屏幕??梢?/div>
    發(fā)表于 03-25 06:38

    touchgfx如何改變圖片顏色?

    touchgfx是否有提供函數(shù)可以直接改變image控件中圖片的顏色,類(lèi)似LVGL中圖片控件的recolor函數(shù),對(duì)圖片重新著色成某種純色圖片,如果touchgfx沒(méi)有這種函數(shù),是否有方法可以實(shí)現(xiàn)這種功能?
    發(fā)表于 03-15 06:24

    STM32H5 DA證書(shū)鏈實(shí)戰(zhàn)經(jīng)驗(yàn)

    之前我們已經(jīng)講過(guò)了如何通過(guò) DA 認(rèn)證來(lái)回退芯片產(chǎn)品狀態(tài),或者重新打開(kāi)調(diào)試口,這樣開(kāi)發(fā)人員在芯片為 Closed 狀態(tài)下時(shí)仍可以調(diào)試芯片。
    的頭像 發(fā)表于 03-12 14:08 ?1099次閱讀
    <b class='flag-5'>STM32</b>H5 DA證書(shū)鏈<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b>

    基于STM32U5片內(nèi)溫度傳感器正確測(cè)算溫度實(shí)戰(zhàn)經(jīng)驗(yàn)分享

    STM32 在內(nèi)部都集成了一個(gè)溫度傳感器,STM32U5 也不例外。這個(gè)位于晶圓上的溫度傳感器雖然不太適合用來(lái)測(cè)量外部環(huán)境的溫度,但是用于監(jiān)控晶圓上的溫度還是挺好的,以防止芯片過(guò)溫運(yùn)行。
    的頭像 發(fā)表于 02-22 17:27 ?4206次閱讀
    基于<b class='flag-5'>STM32</b>U5片內(nèi)溫度傳感器正確測(cè)算溫度<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b>分享

    盤(pán)點(diǎn)那些硬件+項(xiàng)目學(xué)習(xí)套件:STM32U5單片機(jī)開(kāi)發(fā)板及入門(mén)常見(jiàn)問(wèn)題解答

    實(shí)戰(zhàn)經(jīng)驗(yàn); 優(yōu)勢(shì)4: ST官方合作,可考中國(guó)電子學(xué)會(huì)《嵌入式系統(tǒng)設(shè)計(jì)中級(jí)工程師認(rèn)證》證書(shū),也是2024全國(guó)嵌入式大賽ST賽道,ST官方重點(diǎn)推薦的競(jìng)賽MCU芯片選型。 ▋STM32學(xué)習(xí)建議 1.初學(xué)者,不要
    發(fā)表于 02-19 16:59

    BlueNRG系列協(xié)處理器實(shí)戰(zhàn)經(jīng)驗(yàn)簡(jiǎn)介

    BlueNRG 系列芯片從最早的一代 BlueNRG-MS 開(kāi)始就支持協(xié)處理器模式。
    的頭像 發(fā)表于 01-05 18:16 ?1883次閱讀
    BlueNRG系列協(xié)處理器<b class='flag-5'>實(shí)戰(zhàn)經(jīng)驗(yàn)</b><b class='flag-5'>簡(jiǎn)介</b>