文章目录
版本概述
LVGL v9.0.0 是一个重大版本更新,引入了许多新的功能和优化,同时对部分 API 进行了重大变更。虽然许多变更是内部重构,但也有一些直接影响开发者的改动。本版本还提升了性能,并提供了更多对运行时环境的支持。
在迁移项目时,请特别注意可能的非兼容性,因为某些变更可能不会直接导致编译错误,但会影响功能的正确性。
关键注意事项
缓冲区设置变更
- 在 v8 中,使用
lv_disp_draw_buf_init设置缓冲区大小(以像素为单位)。在 v9 中,需使用lv_display_set_buffers函数,并将缓冲区大小改为以字节为单位设置。
示例:
lv_display_set_buffers(display, buf1, buf2, buf_size_byte, mode);- 在 v8 中,使用
lv_color_t类型
v9 中,lv_color_t统一为 RGB888 格式,和LV_COLOR_DEPTH无关。lv_conf.h文件变更lv_conf.h改动较大,迁移时需使用新模板文件lv_conf_template.h。- 不要在
lv_conf.h文件中包含<stdint.h>,否则可能破坏汇编代码的性能优化。
在线图像转换器未更新
使用LVGLImage.py脚本替代在线图像转换器。
主要新功能
1. 运行时显示器色彩格式调整
- 支持 RGB888 渲染。
- 允许在运行时动态调整显示器的色彩格式。
2. 增强的多线程和 RTOS 支持
内置支持 pthread、FreeRTOS 等操作系统环境。
3. 改进的并行渲染架构
提升渲染性能,支持更高效的并行绘制。
4. 内置显示和触摸驱动支持
- 提供常见驱动,如 SDL、Linux Framebuffer、ST7789、ILI9341 等。
5. 矢量图形支持
引入 ThorVG 库,可在画布上绘制矢量图形。
6. 数据绑定和 Observer 模式
支持通过 Observer 模式将数据绑定到 UI 元件,实现更统一、易维护的 API。
7. 更多灵活选项
- 新增
lv_image.h支持对图像进行对齐、拉伸或平铺操作。 - 支持在 GitHub CodeSpaces 上以三步操作运行 LVGL。
API 改动
通用改动
命名规则调整:
lv_disp_...改为lv_display_...btn_...改为button_...img_...改为image_...zoom改为scaleangle改为rotationscr改为screenact改为activedel改为deletecol改为column
API 函数调整:
lv_obj_clear_flag改为lv_obj_remove_flaglv_obj_clear_state改为lv_obj_remove_statelv_coord_t类型被移除,统一为int32_t。
显示 API 变更
显示器创建
在 v9 中,使用以下代码创建显示器并设置缓冲区:lv_display_t * disp = lv_display_create(hor_res, ver_res); lv_display_set_flush_cb(disp, flush_cb); lv_display_set_buffers(disp, buf1, buf2, buf_size_in_bytes, mode);渲染模式
LV_DISPLAY_RENDER_MODE_PARTIAL:缓冲区可小于屏幕尺寸,推荐至少为屏幕的 1/10。LV_DISPLAY_RENDER_MODE_DIRECT:缓冲区需与屏幕尺寸一致,内容始终保持同步。LV_DISPLAY_RENDER_MODE_FULL:每次重绘整个屏幕,双缓冲模式下标准双缓冲。
显示器事件
可以为显示器绑定事件:lv_display_add_event(disp, my_event_cb);其他调整
- 移除
set_px_cb,需要在flush_cb中手动处理像素转换。 disp_drv.scr_transp被替换为lv_display_set_color_format(disp, LV_COLOR_FORMAT_NATIVE_ALPHA)。
- 移除
输入设备(Indev)API 变更
输入设备创建
lv_indev_t * indev = lv_indev_create(); lv_indev_set_type(indev, LV_INDEV_TYPE_...); lv_indev_set_read_cb(indev, read_cb);输入事件
通过lv_indev_add_event绑定事件回调函数。功能精简
移除feedback_cb,改为发送标准事件如LV_EVENT_PRESSED、LV_EVENT_CLICKED。
其他改动
消息机制更新
移除lv_msg,引入更强大的lv_observer。刻度支持
移除lv_chart的刻度支持,改为使用更通用的lv_scale。消息框和选项卡改进
- 消息框使用普通按钮代替按钮矩阵。
- 选项卡使用普通按钮,增加灵活性。
总结
LVGL v9.0.0 带来了许多重要改进和功能增强,同时也对 API 进行了优化和统一。开发者在迁移现有项目时,需要特别注意不兼容的 API 改动,并熟悉新功能的使用方法。通过充分利用新特性,可以更高效地开发更强大和灵活的用户界面。