0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实战经验 | STM32GUI TouchGFX 屏幕切换功能简介

STM32单片机 来源:未知 2023-11-09 10:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


关键词:GUI,TouchGFX,Transition


目录预览

1、引言

2、TouchGFX屏幕切换功能

3、小结


01

引言


TouchGFX 是专用于 STM32 的图形界面设计软件,可基于低成本开发优秀的图形界面,而且它已变的越来越流行。为了帮助客户更加深入地理解和使用 TouchGFX ,本文针对TouchGFX 屏幕切换的实现方式进行了介绍。通过简析基本例程“Transition Example”的源码,剖析其中切屏实现的流程;并简介了如何使用 TouchGFX Designer 快捷地修改屏幕切换模式,希望能帮助客户更好地使用 TouchGFX 切屏特色与功能。


02

TouchGFX屏幕切换功能


2.1. TouchGFX Transition 类介绍


TouchGFX 框架中关于屏幕切换功能,实现了一个 Transition 基类和五个派生类,其关系如下图图 1 所示。其中,Transition 是切屏的抽象基类,定义了屏幕切换期间发生的基本事务。虚函数主要包括:Init(初始化)、tearDown(销毁,切屏完成需要的清理过程)、handleTickEvent(Tick 事件处理函数,主要用于完成切屏的动画效果)、invalidate(失效,用于重绘)等。五个派生类,其中 NoTransition 是最基本的派生类,它没有任何视觉效果,当前屏幕会直接被新屏内容替换。另外四个派生类则具有动画效果:BlockTransition、CoverTransition、SlideTransition 和 WipeTransition。


图1.TouchGFX Transition 类继承关系


BlockTransition 将屏幕分成 8x6 份块,在屏幕切换时会每次随机重绘其中的 2 个块,比较节省 MCU 资源,适合性能不高的 MCU;CoverTransition 的动画效果是“新屏画面从一个方向移动过来,直至完全覆盖原屏幕内容”;SlideTransition 的动画效果是“新屏与原屏拼接在一起,(原屏在前,新屏在后)从指定的方向滑过来”;WipeTransition 的动画效果是“新屏内容从一个方向展开(有一种擦除原屏,露出新屏的效果)”。BlockTransition、CoverTransition、SlideTransition 和 WipeTransition 均在 handleTickEvent 函数中实现各自风格的动画效果,tearDown 函数中则销毁切屏过程中创建的用于动画的临时快照控件等。下面我们首先生成Transition 例程,并对例程源码相关部分做进一步的分析。


2.2. TouchGFX Transition 例程


运行 TouchGFX Designer,选择 Examples;通过 Select Board Setup 选择 STM32H735G DK 板(也可以是 TouchGFX 适用的其它板件);从众多例程中选择“Transition Example”例程;将 Application name 改为 Transition_Example,如下图图 2 所示,然后点击 Create 创建工程。


图2.TouchGFX Designer 生成 Transition Example 例程


进入 TouchGFX Designer 主界面后,会看到画布上有四个方向按钮和一个背景图片,如下 图图 3 所示。我们对界面不做更改,直接选择 Designer 右下角 (Run Target)在目标板上运行。该操作将会复制 TouchGFX 框架文件,生成配置文件、makefile、代码及资源文件(images、fonts、texts),然后编译链接、烧录目标板并运行。程序运行起来后,您可以熟悉一下该例程应用,该应用有 5 个屏幕画面,一个主屏及上下左右 4 个屏幕。点击方向按钮会进行相关方向的切屏。例程中切屏方式是 SlideTransition 模式。下面我们解读一下相关代码,再对Transition 模式进行修改。


图3.TouchGFX Designer Transition Example 设计界面


2.3. 例程代码解读与切屏模式修改


2.3.1. 关键代码流程


切屏操作是由点击按钮触发的,我们以右向按钮 为例,一步步查看调用过程。首先我们可以确定当前屏幕是 MainView 类,MainView 继承自 MainViewBase,该 MainViewBase 由Designer 自动生成。它已经包含了四个按钮、一个背景框和一个背景图片。按钮点击的处理函数为 buttonCallbackHandler。详细代码如下:



我们再来看该按钮处理函数,这里右向按钮调用了 application 对象的gotoRightScreenSlideTransitionEast 函数:



在 FrontendApplicationBase 中,gotoRightScreenSlideTransitionEast 接口通过transitionCallback 跳转到 gotoRightScreenSlideTransitionEastImpl 函数。具体过程,首先application 事务处理过程中会调用 handlePendingScreenTransition,再转至函数evaluatePendingScreenTransition,经 transitionCallback 完成对函数gotoRightScreenSlideTransitionEastImpl 的调用(更多的关于 Callback 的介绍请参阅相关文档或 LAT)。如下图图 4 所示:


图4.Transition Callback 的应用过程


具体代码如下:



函数 gotoRightScreenSlideTransitionEastImpl 中调用了屏幕切换的关键模板函数makeTransition。


2.3.2. 模板函数 makeTransition


下面我们来看一看实现屏幕切换功能的关键模板函数 makeTransition。该函数在MVPApplication.hpp 中,源码如下:



我们知道 TouchGFX 应用架构是 MVP 架构(这里不做过多介绍,需要了解的客户请参考相关文档),这里的 makeTransition 函数将 TouchGFX 应用中的 View&Presenter 和 model 绑定,并与 transition 联系在一起,进而实现切屏功能。具体来说,首先 prepareTransition 函数对当前的 View/Presenter/Transition 进行销毁;然后以模板参数 touchgfx::SlideTransition(用户指定的方向)创建 Transition 派生类对象;以模板参数 ScreenType 类进行新 View 的创建(这里是 RighView);再以模板参数 PresenterType 类创建新的 Presenter(这里是RightPresenter)。将 Presenter 与 Model 绑定并将 View 与 Presenter 绑定(以保证可以正常调用各自接口,实现 MVP 架构功能);最后调用 finalizeTransition 函数,在 finalizeTransition 中进行新 View 的 SetupScreen,绑定新 Transition, 并激活新 Transition。


2.3.3. Transition 动画效果的实现


具体的 Transition 动画效果是在 Transition 派生类的 handleTickEvent 中实现的。我们例程中是 SlideTransition,其 handleTickEvent 中实现了滑动的效果。将原有屏幕的快照,在滑动方向的来向上与新 View 的快照连接,一起沿滑动方向移动,实现动画效果。具体请见下面handleTickEvent 函数源码:



2.3.4. Transition 风格的修改


模板配合 C++编程给予了 TouchGFX 框架极大的简洁性和适配的便利性,对于切屏风格的增加或修改也是非常的简便。客户甚至不需要理解前面介绍的 Transition 具体原理,也能够非常方便地修改切屏模式。使用 TouchGFX Designer,仅需点击几下鼠标即可实现。如下图图 5 所示,这里我们在关联右向按钮的 Interaction 中,将 Transition 模式改为了 Wipe 模式,编译运行即可查看效果。


图5.TouchGFX Designer Transition 模式的修改


03

小结


TouchGFX 是针对 STM32 产品的专用优秀界面设计工具,功能强大易用。本文对屏幕切换功能进行了简介,从基本示例“Transition Example”出发,对切屏部分的源代码进行了浅析,并介绍了如何使用 TouchGFX Designer 实现切屏模式的修改。希望本文能够帮助客户更深入地理解 STM32 TouchGFX。



完整内容请点击“阅读原文”下载原文档。



原文标题:实战经验 | STM32GUI TouchGFX 屏幕切换功能简介

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663496
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371138

原文标题:实战经验 | STM32GUI TouchGFX 屏幕切换功能简介

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【课程升级】STM32U5开发板《TouchGFX 图形界面开发》,从快速入门到深度UI实战教程

    好消息,华清远见STM32U5开发板配套课程升级通知!本次升级计划,主要致力于为初学者提供更深入、更实用的TouchGFX图形界面开发学习体验。01课程升级核心内容快速入门,构建完整学习路径
    的头像 发表于 11-04 11:05 198次阅读
    【课程升级】<b class='flag-5'>STM32</b>U5开发板《<b class='flag-5'>TouchGFX</b> 图形界面开发》,从快速入门到深度UI<b class='flag-5'>实战</b>教程

    解锁物联网摄像头潜力:低成本低功耗硬件设计实战技巧!

    摄像头是物联网视觉感知的关键,但高成本与高功耗常成落地阻碍。本文基于实战经验,提炼硬件设计实用技巧——从简化外围电路到动态功耗管理,助您以更低成本、更低功耗打造物联网摄像头,适配智能家居、安防监控等场景。
    的头像 发表于 09-20 15:22 902次阅读
    解锁物联网摄像头潜力:低成本低功耗硬件设计<b class='flag-5'>实战</b>技巧!

    数据库慢查询分析与SQL优化实战技巧

    今天,我将分享我在处理数千次数据库性能问题中积累的实战经验,帮助你系统掌握慢查询分析与SQL优化的核心技巧。无论你是刚入门的运维新手,还是有一定经验的工程师,这篇文章都将为你提供实用的解决方案。
    的头像 发表于 09-08 09:34 609次阅读

    Linux服务器性能调优的核心技巧和实战经验

    如果你正在为这些问题头疼,那么这篇文章就是为你准备的!作为一名拥有10年经验的运维工程师,我将毫无保留地分享Linux服务器性能调优的核心技巧和实战经验
    的头像 发表于 08-27 14:36 718次阅读

    STM32项目分享:智能语音台灯(机智云)

    01—项目简介1.功能详解STM32智能语音台灯(机智云)功能如下:STM32F103C8T6单片机作为主控单元按键
    的头像 发表于 07-24 18:03 1055次阅读
    <b class='flag-5'>STM32</b>项目分享:智能语音台灯(机智云)

    Linux开发板调屏方法,实战经验让您少走弯路

    本文介绍Linux系统调试屏幕过程中检查屏幕状态及信息的方法。如:驱动、屏幕连接、分辨率、色彩等状态。基于触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立
    的头像 发表于 06-06 18:13 577次阅读
    Linux开发板调屏方法,<b class='flag-5'>实战经验</b>让您少走弯路

    移动电源EMC整改:认证失败到一次通过的实战经验

    深圳南柯电子|移动电源EMC整改:认证失败到一次通过的实战经验
    的头像 发表于 05-26 11:25 572次阅读
    移动电源EMC整改:认证失败到一次通过的<b class='flag-5'>实战经验</b>

    迅为RK3568驱动指南GPIO子系统实战:实现动态切换引脚复用功能

    迅为RK3568驱动指南GPIO子系统实战:实现动态切换引脚复用功能
    的头像 发表于 05-22 14:27 1678次阅读
    迅为RK3568驱动指南GPIO子系统<b class='flag-5'>实战</b>:实现动态<b class='flag-5'>切换</b>引脚复用<b class='flag-5'>功能</b>

    AWTK:一键切换皮肤,打造个性化UI

    视频推荐想让你的应用在不同场景下都能完美呈现吗?皮肤切换功能必不可少!本文将介绍AWTK,一款强大的GUI框架,它通过内置资源管理和优化缓存,轻松实现皮肤切换
    的头像 发表于 04-09 13:00 726次阅读
    AWTK:一键<b class='flag-5'>切换</b>皮肤,打造个性化UI

    STM32项目分享:STM32智能语音台灯

    —项目简介1.功能详解STM32智能语音台灯功能如下:1.STM32F103C8T6单片机系统板作为主控单元2.按键
    的头像 发表于 03-15 10:02 2345次阅读
    <b class='flag-5'>STM32</b>项目分享:<b class='flag-5'>STM32</b>智能语音台灯

    请问stm32L562中如何开发TouchGFX

    TouchGFX生成相关程序及文件 在cubeMX中找到开发板stm32L562eDK,在其中是能fmc,crc,freertos,x-cube-touchgfx生成相关代码输入程序后,黑屏。请教高手,还缺什么步骤?
    发表于 03-07 06:11

    LwIP应用开发实战指南—基于野火STM32

    LwIP应用开发实战指南—基于野火STM32—20210122
    发表于 01-17 14:34 9次下载

    TouchGFX助力STM32打造高效GUI显示方案

    TouchGFX 是一款针对 STM32 微控制器优化的先进免费图形软件框架。 TouchGFX 利用 STM32 图形功能和架构,通过创建
    的头像 发表于 01-13 15:16 1029次阅读
    <b class='flag-5'>TouchGFX</b>助力<b class='flag-5'>STM32</b>打造高效<b class='flag-5'>GUI</b>显示方案

    提升开关电源效率的理论分析与实战经验

    在这里有电源技术干货、电源行业发展趋势分析、最新电源产品介绍、众多电源达人与您分享电源技术经验,关注我们,与中国电源行业共成长! 提升开关电源效率的理论分析与实战经验 引言 开关电源设计中,为获得
    的头像 发表于 01-09 10:04 1799次阅读
    提升开关电源效率的理论分析与<b class='flag-5'>实战经验</b>

    使用MCUXpresso for VS Code插件开发Zephyr的hello world

    本期来到Zephyr实战经验演练,小编带着大家一起使用MCUXpresso for VS Code插件来开发一个属于Zephyr的hello world。
    的头像 发表于 01-03 09:21 1781次阅读
    使用MCUXpresso for VS Code插件开发Zephyr的hello world