源码来自lvgl页面管理器–LanFly
大佬很厉害,我先学习一下,后面模仿着将相册demo也这样抽象出来。

LVGL 页面管理

1.初始化

lv_pm_history_len:
lv_pm_router:
LV_PM_PAGE_NUM:页面总数

2.创建页面


主要流程为创建页面管理结构体pm_page以及页面对象page
lv_pm_router为全局页面管理器

2.1主要结构体lv_pm_page_t

typedef struct _lv_pm_page_t
{lv_obj_t *page;lv_pm_lifecycle onLoad;lv_pm_lifecycle willAppear;lv_pm_lifecycle didAppear;lv_pm_lifecycle willDisappear;lv_pm_lifecycle didDisappear;lv_pm_lifecycle unLoad;lv_pm_open_options_t _options;bool _back;
} lv_pm_page_t;

3.打开页面

1.通过lv_pm_router管理所有页面,通过lv_pm_history[lv_pm_history_len] = id;管理id。
2.留下函数指针接口,让用户自定义。页面的加载用到了主函数中注册的load函数。
3.于动画相关的函数没具体阅读,后面需要用到了再来学习。
4.根据id获取页面时,令_back = false,但是不清楚有什么用,我猜测这个是是否删除页面的标志。

4.关闭当前页面并显示上一个页面

这个与3打开页面很相似,不同的点在于

  1. pm_page->_back = true;
  2. _pm_anima_disAppear(pm_page, &pm_page->_options, _back_disAppear_complete_cb);

很显然,这个函数在页面disApper时调用了会删除页面的回调函数,其中有用户注册的unLoad函数。

5.新增接口:页面切换

模仿上述接口写的

/*****************************************************************************
* @data    :                                                                 *
* @input   : current_id:当前显示页面id                                             *
*            show_id:将要显示页面id                                                *
* @output  : 0:成功                                                            *
*            6:id非法                                                          *
* @brief   : 切换当前显示界面                                                        *
*****************************************************************************/uint8_t lv_pm_switch(uint8_t current_id, uint8_t show_id)
{if (!(lv_pm_router[current_id]) || !(lv_pm_router[show_id]) || current_id > LV_PM_PAGE_NUM || show_id > LV_PM_PAGE_NUM)return 6;lv_pm_page_t* pm_page = lv_pm_router[current_id];pm_page->_back = false;lv_obj_t* page = pm_page->page;if (pm_page->willDisappear) {pm_page->willDisappear(page);}_pm_anima_disAppear(pm_page, &pm_page->_options, _disAppear_complete_cb);lv_pm_page_t* show_pm_page = lv_pm_router[show_id];lv_obj_t* show_page = show_pm_page->page;show_pm_page->_back = false;if (show_pm_page->willAppear) {show_pm_page->willAppear(show_page);}lv_obj_clear_flag(show_pm_page->page, LV_OBJ_FLAG_HIDDEN);_pm_anima_appear(show_pm_page, &pm_page->_options, _appear_complete_cb);return 0;
}

6.新增接口:根据id获取页面。用于获取隐藏页面,实现多页面中某些对象的同步改变

/*****************************************************************************
* @data    :                                                                 *
* @input   : page_id: 要获取的页面id                                          *
* @output  : 0:成功                                                          *
*            page:获取到的页面                                                *
* @brief   : 根据id获取页面                                                    *
*****************************************************************************/lv_obj_t *lv_pm_get_page(uint8_t page_id)
{if (!(lv_pm_router[page_id])  || page_id > LV_PM_PAGE_NUM)return 6;lv_pm_page_t* pm_page = lv_pm_router[page_id];lv_obj_t* page = pm_page->page;return page;
}

LanFly作者的lvgl page manager流程学习相关推荐

  1. RNA-seq流程学习笔记(10)-使用HTSeq-count软件对reads进行计数

    参考文章: 转录组入门(6): reads计数 RNA-seq练习 第二部分 RNA-seq(6): reads计数 转录组学习六(reads计数与标准化) 1. reads计数的原理 对我们测序得到 ...

  2. Cadence Allegro 设计流程学习记录

    Cadence Allegro 设计流程学习记录 前提摘要 软件设计版本: 电路仿真软件:NI Multisim 14.0,TINA-TI. 原理图设计:Design Entry CIS 16.6. ...

  3. Linux SMP启动流程学习(二)

    Linux SMP启动流程学习(二) 3 SMP系统启动流程 3.1 SMP启动判断 源码:/arch/arm/kernel/setup.c 调用:start_kernel() -> smp_s ...

  4. Blender 3.0机器人硬面建模材质渲染全流程学习课程

    学习在Blender中建模硬表面机器人角色 你会学到什么 Blender 3.0建模工具 Blender 3.0硬面人物造型 机器人角色的UV展开 如何在Blender中渲染 MP4 |视频:h264 ...

  5. 【UE5教程】影棚拍摄于虚拟场景合成制作流程学习

    用虚幻引擎预算虚拟生产5 你会学到什么 使用虚幻引擎5进行虚拟生产 使用虚幻引擎5的独立虚拟制作 用虚幻引擎预算虚拟生产5 用虚幻引擎5进行穷人虚拟生产 用虚幻引擎5进行自制虚拟制作 虚幻引擎5独立虚 ...

  6. webpack打包流程_了不起的 Webpack 构建流程学习指南

    最近原创文章回顾: <了不起的 tsconfig.json 指南> <了不起的 Webpack HMR 学习指南(含源码分析)> <<你不知道的 Blob>番 ...

  7. Linux 启动流程学习

    Linux 启动流程学习 开机自检(加载BIOS) 无论什么机器,在开机后都要进行通电自检(硬件),如果硬件有问题,则无法继续下去. (例如当内存条松动时或者损坏,就会发出嘀嘀嘀警报声).接着开始加载 ...

  8. CHIP-seq流程学习笔记(7)-热图软件 deeptools

    参考文章: ChIP-seq操作记录 如何使用deeptools处理BAM数据 用deeptools绘制基因组位置的信息 高通量测序数据处理学习记录(四):DeepTools学习笔记 deepTool ...

  9. CHIP-seq流程学习笔记(13)-ATAC_seq 数据加工处理

    今天第一次尝试处理ATAC_seq数据,希望能尽快做完吧. 先放个找好的参考文章:ATAC-seq/ChIP-seq分析方法 1.建立相应目录 对新数据建立对应实验人员(zhaoyingying).测 ...

最新文章

  1. 【C#】C#创建Windows Service服务
  2. python3.3中print换行
  3. Chrome浏览器查看SSL证书信息
  4. layui如何获取父节点的父节点_layui框架中layer父子页面交互的方法分析
  5. How is S4 Material extened controller loaded
  6. Java8 新特性 Optional
  7. python之父子进程间通信
  8. Flutter PageView 使用详细概述
  9. 学习(踩坑)记录——新建工程
  10. 装机经验-某些服务器安装系统困难,需要BIOS设置
  11. android禁止电话功能,#Android# 启用“阻止模式”功能,避免半夜电话骚扰!
  12. linux kettle运行作业,kettle之linux使用kettle
  13. python实现自动开机_python自动循环定时开关机(非重启)测试
  14. 前端学习笔记-22-浏览器中的DOM操作
  15. mysql linux 安装包下载_mysql官网下载linux版本安装包
  16. 微吼林彦廷:当直播成为一门显学
  17. android studio 报错Permission is only granted to system apps
  18. Fabric2.3分布式部署
  19. 腾讯企业邮箱客户端配置
  20. for循环的语句执行顺序

热门文章

  1. Win10局域网共享,看不到其他电脑
  2. WIS_EMAP_INPUT使用
  3. Windows Azure 解决方案系列: 开发拓展搜索-救援应用程序,拯救更多溺水者
  4. (附源码)计算机毕业设计ssm基于博客系统的UI手机界面展示
  5. 极致CMS精仿小黑猿资源站源码
  6. DockerCompose
  7. Dell服务器安装系统中遇到的坑
  8. RuntimeError: Calculated padded input size per channel: (1 x 1). Kernel size: (5 x 5). Kernel size c
  9. python实现掷骰子小游戏(附源码 简单易懂)
  10. Java Swing的布局管理器