嵌入式UI管理组件
本文最后更新于:17 天前
通用型UI界面切换管理实现
一、模块简介
- UI调度组件是在小型嵌入式界面切换产品上实现的界面切换控制管理通用型模块。
二、需求分析
- 目标实现的是一个通用型嵌入式设备上的UI切换管理组件,应用的场景包括但不限于如下LCD嵌入式产品的UI界面
- 功能性需求:
- 能适用于大多数场景下的UI界面切换
- 使界面方便管理,界面间关系可读性高
- 包含固定界面与弹窗类界面的切换业务实现
- 需要包含弹窗类界面进入退出时的历史界面保持
- 包含两种界面切换方式
- 记录当前界面状态的切换
- 销毁当前界面状态的切换
- 普通界面直接切换也可以保存历史信息,如从列表界面进入指定界面再退出时需要记录列表界面的历史选择项
- 弹窗类界面与普通界面的区别是弹窗类界面存在历史界面且从弹窗界面进入弹窗界面时需要做到历史界面的传递
- 非功能性需求:
- 能适配大多数UI显示及led显示业务
- 能够快速合入到项目中使用不需要太多的学习成本
- 如果不能满足特定场景下的使用要求可读性高方便使用者自有改动
三、架构设计
设计目标
- 可移植性
- 易用性
- 可读性
设计原理
- UI界面在项目交互方案给出以后是确定的,UI对象中包含UI的绘制、UI界面对事件的判断、动态UI的业务、UI界面退出时的UI空间对象销毁、界面类型(普通界面与弹窗类界面)、历史界面。
- UI调度器类需要包含界面列表的指针(指针数组的指针)、当前界面的ID、总界面个数。
- 历史界面的进入和退出与普通界面的切换需要根据参数进行区分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36typedef enum
{
PAGE_TYPE_NORMAL, //普通界面
PAGE_TYPE_MSEEAGE, //弹窗类界面
} UIPAGE_TYPE;
typedef enum
{
INIT_PARAM_RESET, //返回重新绘制界面
INIT_PARAM_RECORD, //按照上次的参数返回
}UIPAGE_INIT_PARAM;
typedef struct Gui_t Gui;
/* 界面初始化处理函数 */
typedef void (*uiInitHandle)(Gui *gui,uint8_t type);
/* 界面退出处理函数 */
typedef void (*uiExitHandle)(Gui *gui);
/* 界面业务处理函数 */
typedef void (*uiWorkHandle)(Gui *gui);
/* 界面事件处理函数 */
typedef void (*uiEventHandle)(Gui *gui, uint32_t event, uint32_t param);
typedef struct PageNode_t
{
uint16_t pageType; //界面类型
uint16_t pageBack; //界面的历史界面
uiInitHandle init; //界面构造函数、界面的绘制、数据的填充
uiExitHandle exit; //界面退出的析构函数
uiWorkHandle work; //界面需要循环执行的业务函数如动画
uiEventHandle event; //界面的时间回调函数
} PageNode;
typedef struct Gui_t
{
PageNode **nodeList; //调度器挂载的界面列表
uint16_t num; //总挂载的界面个数
uint16_t page; //当前显示的界面
void *uiPtr; //界面包含的参数指针 可以在界面之间进行参数传递
} Gui;
四、落地实践
嵌入式UI管理组件
https://hudaxia.top/2021/06/12/组件-UI调度实现/