LanFly作者的lvgl page manager流程学习
源码来自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打开页面很相似,不同的点在于
pm_page->_back = true;
_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流程学习相关推荐
- RNA-seq流程学习笔记(10)-使用HTSeq-count软件对reads进行计数
参考文章: 转录组入门(6): reads计数 RNA-seq练习 第二部分 RNA-seq(6): reads计数 转录组学习六(reads计数与标准化) 1. reads计数的原理 对我们测序得到 ...
- Cadence Allegro 设计流程学习记录
Cadence Allegro 设计流程学习记录 前提摘要 软件设计版本: 电路仿真软件:NI Multisim 14.0,TINA-TI. 原理图设计:Design Entry CIS 16.6. ...
- Linux SMP启动流程学习(二)
Linux SMP启动流程学习(二) 3 SMP系统启动流程 3.1 SMP启动判断 源码:/arch/arm/kernel/setup.c 调用:start_kernel() -> smp_s ...
- Blender 3.0机器人硬面建模材质渲染全流程学习课程
学习在Blender中建模硬表面机器人角色 你会学到什么 Blender 3.0建模工具 Blender 3.0硬面人物造型 机器人角色的UV展开 如何在Blender中渲染 MP4 |视频:h264 ...
- 【UE5教程】影棚拍摄于虚拟场景合成制作流程学习
用虚幻引擎预算虚拟生产5 你会学到什么 使用虚幻引擎5进行虚拟生产 使用虚幻引擎5的独立虚拟制作 用虚幻引擎预算虚拟生产5 用虚幻引擎5进行穷人虚拟生产 用虚幻引擎5进行自制虚拟制作 虚幻引擎5独立虚 ...
- webpack打包流程_了不起的 Webpack 构建流程学习指南
最近原创文章回顾: <了不起的 tsconfig.json 指南> <了不起的 Webpack HMR 学习指南(含源码分析)> <<你不知道的 Blob>番 ...
- Linux 启动流程学习
Linux 启动流程学习 开机自检(加载BIOS) 无论什么机器,在开机后都要进行通电自检(硬件),如果硬件有问题,则无法继续下去. (例如当内存条松动时或者损坏,就会发出嘀嘀嘀警报声).接着开始加载 ...
- CHIP-seq流程学习笔记(7)-热图软件 deeptools
参考文章: ChIP-seq操作记录 如何使用deeptools处理BAM数据 用deeptools绘制基因组位置的信息 高通量测序数据处理学习记录(四):DeepTools学习笔记 deepTool ...
- CHIP-seq流程学习笔记(13)-ATAC_seq 数据加工处理
今天第一次尝试处理ATAC_seq数据,希望能尽快做完吧. 先放个找好的参考文章:ATAC-seq/ChIP-seq分析方法 1.建立相应目录 对新数据建立对应实验人员(zhaoyingying).测 ...
最新文章
- 【C#】C#创建Windows Service服务
- python3.3中print换行
- Chrome浏览器查看SSL证书信息
- layui如何获取父节点的父节点_layui框架中layer父子页面交互的方法分析
- How is S4 Material extened controller loaded
- Java8 新特性 Optional
- python之父子进程间通信
- Flutter PageView 使用详细概述
- 学习(踩坑)记录——新建工程
- 装机经验-某些服务器安装系统困难,需要BIOS设置
- android禁止电话功能,#Android# 启用“阻止模式”功能,避免半夜电话骚扰!
- linux kettle运行作业,kettle之linux使用kettle
- python实现自动开机_python自动循环定时开关机(非重启)测试
- 前端学习笔记-22-浏览器中的DOM操作
- mysql linux 安装包下载_mysql官网下载linux版本安装包
- 微吼林彦廷:当直播成为一门显学
- android studio 报错Permission is only granted to system apps
- Fabric2.3分布式部署
- 腾讯企业邮箱客户端配置
- for循环的语句执行顺序
热门文章
- Win10局域网共享,看不到其他电脑
- WIS_EMAP_INPUT使用
- Windows Azure 解决方案系列: 开发拓展搜索-救援应用程序,拯救更多溺水者
- (附源码)计算机毕业设计ssm基于博客系统的UI手机界面展示
- 极致CMS精仿小黑猿资源站源码
- DockerCompose
- Dell服务器安装系统中遇到的坑
- RuntimeError: Calculated padded input size per channel: (1 x 1). Kernel size: (5 x 5). Kernel size c
- python实现掷骰子小游戏(附源码 简单易懂)
- Java Swing的布局管理器