试用 LVGL Pro,一套完整的工具包,助您高效构建、测试、分享和交付 UI!
LVGL
版本发布

LVGL v8.3.0 发布

LVGL v8.3.0 带来了基于图层的变换、继承/初始样式值、NXP GPU 支持、彩色字体与表情符号、ARM2D 加速以及 PubSub 消息系统。

加博尔·基什-瓦莫希加博尔·基什-瓦莫希19 分钟阅读

概述#

LVGL v8.3.0 引入了强大的新渲染能力、扩展的硬件加速支持以及改进的开发者体验。

图层#

支持对任何控件及其子控件进行变换(缩放和旋转),这些控件由 LVGL 绘制。为了实现这一点,LVGL 会将变换后的控件渲染到一个图层中,然后将该图层作为图像绘制,并应用所有变换。当设置了 opa(而不是 bg_opa、border_opa 等)和 blend_mode 时,也会使用图层。这样,嵌套对象会作为一个图层进行混合,以避免颜色渗透。更多信息请参见文档。

继承和初始样式属性#

除了为样式属性设置"正常值"外,现在还可以将它们设置为 inherit(继承父对象的值)和 initial(设置为系统默认值)。更多信息请参见文档。

NXP PXP 和 VGLite GPU 支持#

重新添加了对 NXP GPU 的支持,为 i.MX RT 和 i.MX 系列处理器带来了硬件加速。

彩色字体支持#

通过这一出色的新功能,您可以在文本中使用表情符号和图像。更多信息请参见文档。

ARM2D GPU 支持#

获得对 Arm 微控制器 2D 图形加速的支持,包括基于 Helium 的加速和基于 DMA-350 的加速。

PubSub 消息系统#

添加了基于发布者-订阅者的消息系统,使组件之间的通信更加容易。更多信息请参见文档。

拼音输入法#

添加了对拼音输入法中文输入的支持。更多信息请参见文档。

渲染开始回调函数#

在 lv_disp_drv_t 中添加了一个新的回调函数,用于指示渲染何时开始。这对于同步非常有用,例如等待 TE(撕裂效应)信号。


新功能#

  • feat(ime_pinyin):添加 API 以支持 9 键输入模式 #3447
  • feat(font):添加字体占位符绘制配置 #3446
  • feat(fsdrv):添加 posix lseek() 错误检查 #3444
  • feat(misc):添加异步调用函数取消功能 #3439
  • feat(ime_pinyin):添加 API 以使用拼音输入法(中文输入) #3408
  • feat(style):添加 'inherit' 和 'initial' CSS 属性 #3390
  • feat(porting):向模板添加刷新控制 #3384
  • feat(anim):添加删除回调函数 #3295
  • feat(cmsis-pack):5 月份月度更新 #3394
  • feat(textarea):使其可以自定义项目符号字符 #3388
  • feat(disp):添加临时失效禁用接口 #3378
  • feat(group):添加边缘回调函数,当尝试将焦点移动到开始或结束位置之外时触发 #3374
  • feat(benchmark):使 lvgl 以最高帧率渲染 #3352
  • feat(rt-thread):允许用户在 lvgl 线程中控制刷新周期 #3375
  • feat(cmsis-pack):5 月份月度更新(alpha) #3359
  • feat(demos):为基准测试添加回调函数 #3353
  • feat(gpu):使用新功能更新 lv_gpu_arm2d #3340
  • feat(draw):改进 LV_IMG_CF_ALPHA_8BIT 的加速 #3337
  • feat(anim):添加获取全局动画刷新计时器的函数 #3331
  • feat(demo):添加加权 FPS 和不透明度速度日志输出 #3326
  • feat(gpu):更新 gpu arm 2d #3320
  • feat(cmsis-pack):4 月份月度更新 #3300
  • feat(fsdrv):修复 win32 后端的问题 #3284
  • feat(cmake-build):添加允许构建共享库的选项 #3278
  • feat(hal):向 disp_drv 添加 render_start_cb #3274
  • feat(cmsis-pack):4 月份月度更新(v1.0.3-alpha) #3271
  • feat(benchmark):为运行特定场景添加跟踪输出 #3245
  • feat(env_support):cmsis pack 月度更新 #3209
  • feat(tabview):支持垂直滚动 #3184
  • feat(span):添加用于设置行数的接口 #3200
  • feat(indev):添加一次性启用/禁用所有输入设备的功能 #3179
  • feat(font):添加 imgfont - 可用于向 label/span 添加表情符号 #3160
  • feat(gpu):添加 gpu arm2d #3162
  • feat(dma2d):添加 lv_draw_stm32_dma2d_buffer_copy 函数 #3147
  • feat(disp):添加屏幕退出动画 #3081
  • feat(menu):使菜单控件与编码器更兼容 #3061
  • feat(label):添加动画样式属性以将其应用于标签控件的循环滚动动画 #3128
  • feat(script):添加用于代码格式化的 pre-commit 配置 #3092
  • feat(refr):防止脏区域在渲染期间被修改 #3107
  • feat(log):改进 lv_log 并从 lv_demo_benchmark 添加日志结果 #3084
  • feat(fragment):添加片段管理器(UI 控制器概念) #2940
  • feat(porting):添加宏 lv_run_timer_handler_in_period 以简化移植 #3063
  • feat(gpu):重新附加 nxp pxp vglite 加速器 029eef7
  • feat(draw):支持变换控件并改进软件变换 318146a
  • feat(msg):添加发布者-订阅者消息系统 79a29d7
  • feat(benchmark):添加运行特定场景的 API 305ad00
  • feat(gpu):添加 SWM341 gpu 支持(synwit) 07b7eea
  • feat(arc):添加 lv_arc_align_obj_to_angle 和 lv_arc_rotate_obj_to_angle a76bb70
  • feat(draw):添加 draw_ctx->buffer_copy d034511
  • feat(dropdown):添加 lv_dropdown_get_option_index 9997fb0
  • feat(tabview):添加重命名选项卡的 API 2c9695a
  • feat(indev):在使用 wait_until_release 释放时发送 LV_EVENT_PRESS_LOST cc18518
  • feat(gridnav):添加 lv_gridnav_set_focused b6d2daa

性能优化#

  • perf(draw):加速非正常混合模式 5a06fce
  • perf(draw):点变换的小优化 c6c2864
  • perf(layer):缓存 layer_type ac2e2f1

修复#

  • fix(draw):解决与外部 ALIGN 定义的冲突 #3336
  • fix(arc):修复 LV_ARC_MODE_REVERSE 的 bug #3418
  • fix(fragment):修复片段的内存泄漏 #3442
  • fix(draw):解决内存泄漏问题 #3437
  • fix(gridnav):修正 find_last_focusable 中的逻辑 #3423
  • fix(examples):修正滑块示例中的注释 #3419
  • fix(sdl):为 SDL 后端添加变换支持 #3403
  • fix(bmp):修复 LV_COLOR_16_SWAP 的问题 #3412
  • fix(sdl):修复 LRU #3404
  • fix(draw):避免在绘制圆弧时使用已释放的内存 #3399
  • fix(subpx):修复子像素渲染字体不显示的 bug #3387
  • fix(style):在 gc sweep/lv_deinit 后重置样式查找表 #3385
  • fix(benchmark):修复使用错误场景编号的问题 #3372
  • fix(draw):修复索引和仅 alpha 的颜色支持 #3371
  • fix(mem):修复当请求的大小过大时 TLSF 返回错误指针的问题 #3325
  • fix(demo):修复警告 #3344
  • fix(config):添加 LV_GPU_SDL_LRU_SIZE #3348
  • fix(txt):修复 lv_txt_iso8859_1_next(..., NULL) 的返回值 #3338
  • fix(benchmark):为小屏幕移除冗余字符串 #3335
  • fix(chart):修复访问未初始化的 point_area #3327
  • fix(config):将 LV_LAYER_SIMPLE_BUF_SIZE 添加到 Kconfig #3312
  • fix(config):保持控件的顺序 #3314
  • fix(config):修复 LV_USE_PERF_MONITOR 和 LV_USE_MEM_MONITOR 中的拼写错误 #3313
  • fix(refr):初始化 row_cnt 以消除警告 #3309
  • fix(meter):修复拼写错误 #3308
  • fix(draw):更新 Makefiles #3303
  • fix(lodepng):修复 NULL 指针访问 #3307
  • fix(Kconfig):将 LV_FS_STDIO_LETTER 的类型从字符串改为整数 #3282
  • fix(demo):修复 Wformat 警告 #3290
  • fix(snapshot):添加缺失的 ASSERT 检查 #3292
  • fix(Kconfig):将 LV_USE_GRIDNAV 和 LV_USE_FRAGMENT 添加到 Kconfig #3270
  • fix(msgbox):当 obj == NULL 时不执行 init obj #3264
  • fix(menu):对 new_node 使用 LV_ASSERT_MALLOC 检查 #3263
  • fix(canvas):设置 canvas 的 buff 后图像缓存可能过期 #3267
  • fix(obj_style):防止访问类空指针 #3252
  • fix(png):修复解码失败时可能的内存泄漏 #3249
  • fix(libs):修复扩展名匹配导致的可能缓冲区下溢 #3250
  • fix(fs):使用 win32 后端跟踪多个目录句柄 #3243
  • fix(png):使用 LV_IMG_CF_TRUE_COLOR_ALPHA 而不是 LV_IMG_CF_RAW_ALPHA #3212
  • fix(Keil-AC5):消除 Keil-AC5 中的警告 #3221
  • fix(meter):修复循环变量类型不匹配导致的无限循环 #3232
  • fix(chart):移除无效的决策分支 #3231
  • fix(gradient):在除以 0 之前断言 #3228
  • fix(calendar):修复循环变量类型不匹配导致的无限循环 #3230
  • fix(flex):在除以 0 之前断言 #3237
  • fix(hal):修复 LV_ASSERT_MALLOC 的错误位置 #3236
  • fix(disp):修复缺失的空指针判断 #3238
  • fix(obj_class):修复当默认 disp 为 NULL 时可能的内存泄漏 #3235
  • fix(draw_sw_letter):修复指针的 sizeof 使用不正确 #3234
  • fix(indev):修复拼写错误导致的空指针访问 #3229
  • fix(event):移除无效的决策分支 #3233
  • fix(draw_mask):移除无效的决策分支 #3225
  • fix(spinbox):移除无效的判断 #3227
  • fix(gradient):移除无效的决策分支 #3226
  • fix(txt):如果 letter_uni 超出范围则返回 0 #3224
  • fix(calendar):修复可能的数组越界访问 #3223
  • fix(style):移除无用的空指针判断 #3222
  • fix(obj):使用 lv_obj_set_parent() 时的滚动异常 #3210
  • fix(libs):修复 memcmp 内存访问溢出 #3205
  • fix(png):修复可能的文件泄漏 #3204
  • fix(docs):将 task-handler.md 重命名为 timer-handler.md #3203
  • fix(lru):修复未定义变量的使用 #3181
  • fix(rt-thread):Sconscript 使用 LOCAL_CFLAGS 替换 LOCAL_CCFLAGS #3196
  • fix(make):修复 draw/gpu 下的文件 #3202
  • fix(docs-CN):修复 get-started 目录中的文档断链 #3195
  • fix:修复 get-started 目录中的文档断链 #3190
  • fix(indev):修复使用 %d 格式化 uint32_t 的警告 #3193
  • fix(Kconfig):将 LV_USE_IMGFONT 移动到其他菜单 #3176
  • fix(draw):当 LV_DRAW_COMPLEX 为 '0' 时 src_buf_tmp 将为 NULL #3163
  • fix(span):对齐基线 #3164
  • fix(menu):修复删除时崩溃 #3154
  • fix(Kconfig):添加缺失的 LV_USE_THEME_MONO #3146
  • fix(demo/stress):移除未使用的资源 #3139
  • fix(jpg):当宏 LV_COLOR_16_SWAP 为 1 时交换高低字节 #3138
  • fix(script):在 lv_conf_internal 中修复使用 Kconfig 时的一些控件依赖关系 #3119
  • fix(demo):基准测试的小修复 #3114
  • fix(misc):在 lv_map() 中处理最大值小于最小值的情况 #3113
  • fix(extra):调整图像解码器初始化顺序 #3085
  • fix(chart):优化图表失效 #3028
  • fix(refr):修复性能监视器 NULL 指针访问 #3105
  • fix(misc):移除 _lv_log_add 的重复声明 #3103
  • fix(gridnav):从实际事件获取键码 #3101
  • fix(draw_rect):删除 STDC_VERSION 以确保 C++ 兼容性 #3099
  • fix(font):如果 get_glyph_dsc() 返回 false 则绘制占位符 #3000
  • fix(conf):解决 GCC bug #3082
  • fix(fsdrv):为安全起见,用 lv_snprintf 替换 sprintf #3079
  • fix(cmsis-pack):为 cmsis-pack 添加 PIDX #3064
  • fix(fs):修复缓存读取并为 lv_fs 添加单元测试 98660a8
  • fix(table):仅使更改的单元格失效 306fa19
  • fix(draw):处理 ARGB 绘制的非 BLEND_MODE_NORMAL 9ac8ce6
  • fix(draw):恢复处理非 MAIN 部分上的 style_opa 51a7a61
  • fix(draw):在 lv_draw_sw_rect 中将 bg img 裁剪到矩形区域 77d726e
  • fix(obj):修复 LV_OBJ_FLAG_OVERFLOW_VISIBLE c742f2c
  • fix(scroll):不要在每个滚动步骤上触发滚动开始/结束事件 25ce6e3
  • fix(indev):不要向禁用状态的对象发送按键 b0a46c4
  • fix(disp):使 lv_scr_load 与 lv_scr_load_anim 和 auto_del = true 更好地配合工作 52287fd
  • fix(draw):为混合模式创建中间图层 8b15007
  • fix(group):在 lv_group_remove() 中修复要聚焦的对象被删除的问题 72cb683
  • fix(draw):确保角度值在正确的范围内 e624b90
  • fix(scroll):在没有动画时也发送 LV_EVENT_SCROLL_BEGIN/END 777fe1e
  • fix(arc):修复圆弧图像绘制问题 7153e3f
  • fix(refr):修复内存写入越界问题 13c99fc
  • fix(gif):修复绘制 gif 背景时的罕见问题 b1e2c06
  • fix(chart):修复条形图上水平刻度线未对齐的问题 4572a0c
  • fix(font):对不可打印字符使用 0 宽度 7cf5709
  • fix(keyboard):在映射更改时不显示弹出窗口 ac202e7
  • fix(refr):考虑带有 LV_OBJ_FLAG_OVERFLOW_VISIBLE 的遮罩 a7f9dfa
  • fix(draw):修复变换坐标的计算 76de7c6
  • fix(style):修复过渡样式的堆释放后使用 d9ae58b
  • fix(tabview, tileview):修复滚动 22854ff
  • fix(draw):修复 disp_bg_img 绘制 dea75d9
  • fix(textarea):修复最大长度处理 127d8e8
  • fix(btnmatrix):修复额外绘制大小计算以不裁剪阴影 7ada130
  • fix(indev):当 vect 为负数时 scroll_throw_vect 无法收敛到 0 e5c11f1
  • fix(theme):使基本主题更加简单 62d6f3c
  • fix(color):颜色混合舍入错误 523062b
  • fix(style):_lv_style_prop_lookup_flags 告知 LV_STYLE_PROP_ANY 的所有标志 e53f602
  • fix(list):使用正确的图标格式 b171f7d
  • fix(layout):修复 FLOATING 子对象的处理 48728a7
  • fix(style):使颜色过滤器可继承 5546b9d
  • fix(spinbox):在其类中设置其默认宽度 3d92972
  • fix(draw):修复细分区域上的变换 cbff8e8
  • fix(slider):修复范围模式下的左旋钮 17f5e0a
  • fix(Kconfig):允许取消选中 LV_CONF_SKIP f3a07a3
  • fix(style):修复在半径过渡中对宽度和高度都使用 width 6acbdaa
  • fix(dropdown):修复选项居中对齐时的滚动 e651383
  • fix(grid):修复死分支 46bf27d
  • fix(hal):无论 LV_COLOR_SCREEN_TRANSP 如何,默认禁用 driver->screen_transp ff7204e
  • fix(theme):修复单色主题初始化 5ec6694
  • fix(bmp):修复 BPP 条件中的拼写错误 cbc38af
  • fix(theme):在基本主题中仅在聚焦状态下显示文本区域光标 bb03fb1
  • fix(draw):修复图像重新着色 23eecce
  • fix(theme):在默认主题中向文本区域添加禁用样式 00f6759
  • fix(meter):提高刻度线绘制的精度 0255c6d
  • fix(gpu):修复 NXP GPU 的警告 6be43b8
  • fix(color):补偿混合期间的舍入错误 42d9c07
  • fix(examples):使用类型安全函数检索事件参数 71d535d
  • fix(draw):确保变量被初始化以避免警告 276f28a
  • fix(spinbox):将 lv_spinbox_set_pos 重命名为 lv_spinbox_set_cursor_pos a99eb6b
  • fix(layout):使用 uint16_t LV_LAYOUT_FLEX/GRID c596a36
  • fix(event):避免将布尔值用作指针 06fff4b
  • fix(theme):如果 LV_THEME_DEFAULT_TRANSITION_TIME==0 则正确禁用过渡 242112b
  • fix(scroll):修复向左滚动到视图 7c74f65
  • fix(fs):默认将读取缓存标记为无效 54f9987
  • fix(menu):修复删除时崩溃 a6c4c13
  • fix(roller):修复无限模式下的意外跳跃 18f2d78

示例#

  • example(ime_pinyin):改进 lv_example_ime_pinyin_1 #3428
  • example(imgfont):修复 lvgl.h 包含路径 #3405
  • example(btnmatrix):更新 lv_example_btnmatrix_2 以明确检查绘制了哪个部分 6b2eac1
  • example(slider):使 lv_example_slider_3 也适用于深色主题 4a766c5
  • example(span):避免歧义 7bb09e3
  • demo(benchmark):添加 LV_DEMO_BENCHMARK_RGB565A8 选项 afaa8c9

文档#

  • docs(indev):在输入设备部分添加注释 #3422
  • docs(slider):提及 VALUE_CHANGED 不会在释放时发送 #3397
  • docs(readme):添加葡萄牙语(巴西)版本 #3349
  • docs(pc-simulator):添加带 FastModel 的 MDK #3318
  • docs(intro):更新至 v8.2.0 #3316
  • docs(readme):更新 PlatformIO 注册表的链接 #3296
  • docs(gesture):修复拼写错误 lv_indev_act() → lv_indev_get_act() #3291
  • docs(scroll):添加有关滚动坐标的信息 #3088
  • docs(msgbox):修复拼写错误 #3095
  • docs(scroll):使用 LV_DIR_VER 而不是 LV_DIR_TOP #3066
  • docs:重新排列入门部分 8a81532
  • docs:添加渲染器和 gpu 部分 378aaa6
  • docs:默认折叠 API ebd20af
  • docs(images):修复关于 v8.2 中破坏性变更的注释 9a1e385
  • docs(sim):添加 qt-creator 链接 88bbef1
  • docs(chart):描述如何设置列之间的间距 746917d
  • docs(README):修复断链 c2c44c6
  • docs(examples):在加载示例时避免重定向 d367bb7
  • docs(gesture):描述如何在手势后阻止发送事件 65db5c9
  • docs(get-started):将 quick-overview 添加到索引 91ebf81
  • docs(others):将 imgfont 添加到索引 656a0e5

CI 和测试#

  • ci(slider):添加单元测试 #3198
  • test(line):为线控件添加单元测试 #3104
  • test(table):复现减少表格单元格时的问题 #3121
  • test(textarea):添加单元测试 #3074
  • test(table):添加单元测试 #3040
  • ci(docs):用正确的配置变量替换 sed 的使用 1816fa5
  • ci:添加 Makefile 测试 ea79cee
  • test(mem):添加内存处理测试 9700664
  • test(img):修复图像错误差异处理程序 48d87e1
  • ci:更新文档构建器以使用 Python 3.10 a3d66c9
  • ci:确保 LVGL 断言导致测试失败 b83c5aa
  • ci:移除格式化注释 d345f76
  • ci:不要在 PR 上运行工作流两次 fcc1152
  • ci:将测试超时提升至 30 秒 85e3e23
  • ci:将测试限制为 15 秒 003f18f
  • ci(makefile):修复 GitHub action 中的拼写错误 a101e70
  • ci(switch):修复内存泄漏测试 8481e3a
  • ci(stale):升级 action 版本 5977eef
  • ci:在 ARM 测试上也使用 GCC 问题匹配器 9fcefe5

关于作者

加博尔·基什-瓦莫希
加博尔·基什-瓦莫希

LVGL 创始人

LVGL 的创始人和首席开发者,这是一个被全球数百万设备使用的开源嵌入式图形库。

认识博客背后的作者们

了解那些分享 LVGL 知识的优秀作者们

查看作者

订阅我们的通讯 不错过任何关于 LVGL 的新闻。我们每月最多发送 2 封邮件。

LVGL

LVGL 是最受欢迎的免费开源嵌入式图形库,支持任何 MCU、MPU 和显示类型,助您构建精美的用户界面。

我们还提供 UI 设计、实现和咨询等服务。

© 2026 LVGL。保留所有权利。
YouTubeGitHubLinkedIn