文章目录
版本概述
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
改为scale
angle
改为rotation
scr
改为screen
act
改为active
del
改为delete
col
改为column
API 函数调整:
lv_obj_clear_flag
改为lv_obj_remove_flag
lv_obj_clear_state
改为lv_obj_remove_state
lv_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 改动,并熟悉新功能的使用方法。通过充分利用新特性,可以更高效地开发更强大和灵活的用户界面。