一个为 LVGL 精心定制的 APP 页面管理器,简单易用,功能强大,支持多种酷炫动画
简单、易用、强大
- 支持页面全生命周期管理,参考手机 APP 生命周期
- 支持多种酷炫动画,内置集成
- 多个页面代码隔离,单文件开发体验
#include "pm.h"
void main()
{
lv_pm_init();
lv_pm_page_t *home = lv_pm_create_page(0);
page->onLoad = page_home_onLoad; // 需要你实现的页面函数
page->unLoad = page_home_unLoad; // 需要你实现的页面函数
lv_pm_open_page(0, NULL);
}
// home.c
#include "home.h"
void page_home_onLoad(lv_obj_t *page)
{
// 所有对象都挂载在 page 下面,页面管理器会自动帮你管理内存
lv_obj_t *label = lv_label_create(page);
lv_label_set_text(label, "hello home page");
}
void page_home_unLoad(lv_obj_t *page)
{
// onLoad 和 unLoad 必须实现,所有挂载在 page 下的对象都会自动释放
// 你只需要释放自己申请的内存
}
在 examples 下自带了可运行的例程,你可以通过下面的命令编译并运行:
- 确保 Git Submodule 都下载下来了,注意有2个,你需要在
根目录
和lvgl-simulator-x
都执行一遍git submodule update --init
- 创建
build
文件夹并进入 - 执行
cmake ../examples
- 执行
make
- 运行
./lvgl-pm-demo
默认运行的是 helloworld,你可以在 examples/CMakeLists.txt
文件开头设置不同的目录名来运行不同的例程
这个函数必须在使用任何页面管理器 API 之前调用
返回 0 表示 OK,其它值表示错误,你需要自己处理错误
创建一个路由并且指定路由标识 ID,这个 ID 在打开页面时会用到,必须唯一。
一般 ID 从下标 0 开始,你可以按照页面的顺序来分配 ID
注意:默认路由表长度是 10,所以你不能使用超过长度的 ID 值,如果大于 10,你可以使用
#define LV_PM_PAGE_NUM 20
指定长度
创建好路由后,你可以注册页面的生命周期函数了,此时并不会真正的创建页面
下面 2 个生命周期是必须实现的:
- onLoad
- unLoad
根据指定的路由 ID 打开页面,此时会调用 onLoad 真正创建页面
参数 behavior
:指定打开页面的行为,过渡动画,打开方式,动画方向。默认为 NULL
注意:为了页面代码简单,我们并没有实现多实例。所以一个路由 ID 同时只能被打开一次,打开 2 次以上的行为是未定义的,会产生不可预期的错误 在未来的版本中,我们会支持页面多实例
示例:
#include "pm.h"
lv_pm_open_options_t options = {
.animation = LV_PM_ANIMA_SLIDE // 使用滑动动画打开页面
};
lv_pm_open_page(0, &options);
// 或者使用默认行为 lv_pm_open_page(0, NULL);
关闭当前页面并且显示上一个页面。如果当前只有一个页面或者没有打开页面,则此函数什么也不做
- LV_PM_TARGET_NEW : 打开一个新的页面
- LV_PM_TARGET_SELF : 在当前页面中打开(先关闭当前页面,再打开新页面)
- LV_PM_TARGET_RESET : 只打开一个当前页面(先关闭所有页面,再打开新页面)
- onLoad : 页面创建,你可以在这里执行初始化
- willAppear : 页面即将被展示
- didAppear : 页面已经被完整展示
- willDisappear : 页面即将被隐藏
- didDisappear : 页面已经被隐藏不可见
- unLoad : 页面被关闭,你需要在这里释放所有临时内存,否则可能存在泄漏
- LV_PM_ANIMA_NONE: 不使用过渡动画
- LV_PM_ANIMA_SLIDE: 滑动动画,页面从右往左出现,从左往右消失
- LV_PM_ANIMA_SLIDE_SCALE: 滑动并缩放页面,页面从右往左先出现,再放大全屏
- 更多动画开发中,欢迎贡献代码,开发过渡动画非常简单