Skip to content

jinsc123654/lvgl-pm

This branch is up to date with LanFly/lvgl-pm:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

825df21 · Oct 28, 2022

History

10 Commits
Oct 28, 2022
Jul 28, 2022
Oct 28, 2022
Jul 29, 2022
Jul 28, 2022
Aug 13, 2022
Jul 25, 2022
Jul 26, 2022
Oct 28, 2022

Repository files navigation

LVGL-PM

version v0.1.1 license MIT

English Document

一个为 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 下自带了可运行的例程,你可以通过下面的命令编译并运行:

  1. 确保 Git Submodule 都下载下来了,注意有2个,你需要在根目录lvgl-simulator-x都执行一遍 git submodule update --init
  2. 创建 build 文件夹并进入
  3. 执行 cmake ../examples
  4. 执行 make
  5. 运行 ./lvgl-pm-demo

默认运行的是 helloworld,你可以在 examples/CMakeLists.txt 文件开头设置不同的目录名来运行不同的例程

API

uint8_t lv_pm_init()


这个函数必须在使用任何页面管理器 API 之前调用

返回 0 表示 OK,其它值表示错误,你需要自己处理错误

lv_pm_page_t *lv_pm_create_page(uint8_t id)


创建一个路由并且指定路由标识 ID,这个 ID 在打开页面时会用到,必须唯一。

一般 ID 从下标 0 开始,你可以按照页面的顺序来分配 ID

注意:默认路由表长度是 10,所以你不能使用超过长度的 ID 值,如果大于 10,你可以使用 #define LV_PM_PAGE_NUM 20 指定长度

创建好路由后,你可以注册页面的生命周期函数了,此时并不会真正的创建页面

下面 2 个生命周期是必须实现的:

  1. onLoad
  2. unLoad

uint8_t lv_pm_open_page(uint8_t id, lv_pm_open_options_t *behavior)


根据指定的路由 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);

uint8_t lv_pm_back()


关闭当前页面并且显示上一个页面。如果当前只有一个页面或者没有打开页面,则此函数什么也不做

新页面的打开方式

  1. LV_PM_TARGET_NEW : 打开一个新的页面
  2. LV_PM_TARGET_SELF : 在当前页面中打开(先关闭当前页面,再打开新页面)
  3. LV_PM_TARGET_RESET : 只打开一个当前页面(先关闭所有页面,再打开新页面)

完整的生命周期

  1. onLoad : 页面创建,你可以在这里执行初始化
  2. willAppear : 页面即将被展示
  3. didAppear : 页面已经被完整展示
  4. willDisappear : 页面即将被隐藏
  5. didDisappear : 页面已经被隐藏不可见
  6. unLoad : 页面被关闭,你需要在这里释放所有临时内存,否则可能存在泄漏

内置过渡动画

  • LV_PM_ANIMA_NONE: 不使用过渡动画
  • LV_PM_ANIMA_SLIDE: 滑动动画,页面从右往左出现,从左往右消失
  • LV_PM_ANIMA_SLIDE_SCALE: 滑动并缩放页面,页面从右往左先出现,再放大全屏
  • 更多动画开发中,欢迎贡献代码,开发过渡动画非常简单

About

A simple page manager for LVGL.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 97.3%
  • CMake 2.7%