2 Star 5 Fork 2

sudo / lvgl-pm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

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: 滑动并缩放页面,页面从右往左先出现,再放大全屏
  • 更多动画开发中,欢迎贡献代码,开发过渡动画非常简单
MIT License Copyright (c) 2022 sudo (https://timor.tech) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

A simple page manager for LVGL. 一个为 LVGL 精心定制的 APP 页面管理器,简单易用,功能强大,支持多种酷炫动画 展开 收起
C 等 2 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/onedevice/lvgl-pm.git
git@gitee.com:onedevice/lvgl-pm.git
onedevice
lvgl-pm
lvgl-pm
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891