LVGL
LVGL 中文:欢迎阅读LVGL中文开发手册! — LVGL 文档
移植流程
|
|
使用流程
|
|
注意:
绘制缓冲区的变量必须是静态的 or 全局的 or 动态分配的,不可以是局部变量!
LVGL支持使用两块绘制缓冲区,如果用户只使用一块缓冲区,则LVGL需要等待显示设备对缓冲区内容绘制完成后才可以继续使用缓冲区。
如果用户使用两块绘制缓冲区,则显示设备绘制第一块缓冲区时,LVGL可以操作第二块缓冲区,相当于效率更高。
为了提高效率,最优缓冲区大小可以设置为屏幕分辨率的 1/10
缓冲区大小 = 屏幕宽 × 屏幕高 / 10(像素个数)
为什么不使用局部变量?
普通局部变量存储在栈区,函数退出后内存会被释放,导致LVGL读取到乱码,屏幕花屏、死机、内存非法访问。
static/全局变量放在数据段,程序运行期间永久有效
回调函数
一般是作为函数参数使用的,也就是需要把一个函数的地址作为另一个函数的参数,回调函数不一定会被执行,当用户调用了把回调函数作为参数的那个函数时,回调函数才会执行。
简述回调函数的意义?
解耦:将调用方与具体实现分离,底层只负责触发,不关心具体逻辑。
异步与事件驱动:适用于等待事件发生后再执行的场景,无需阻塞等待。
灵活扩展:通过注册不同回调实现不同功能,不修改底层代码。
对象使用指针作为句柄 lv_obj_t
基础对象
|
|
可以通过set/get设置对象,函数调用:lv_obj_set_... lv_obj_get_...
|
|
特殊对象
对象类型也有特殊属性。例如,slider
- Minimum and maximum values
- Current value
|
|
创建和删除对象
|
|
创建屏幕 lv_obj_create(NULL)
|
|
屏幕是没有父对象的特殊对象
获取活动屏幕 lv_scr_act()
加载屏幕 lv_scr_load(scr1)
图层
top layer 顶层(top 层) 可以添加弹窗、悬浮窗
system layer 系统层(sys 层) 可以添鼠标光标、最高级提示加
系统层 (system) > 顶层 (top) > 所有普通控件
常见状态
| 状态宏定义 | 中文释义 | 说明 / 使用场景 |
|---|---|---|
| LV_STATE_DEFAULT | 默认状态 / 正常释放 | 控件常态,未被操作、未禁用、未选中 |
| LV_STATE_CHECKED | 选中 / 勾选 | 开关打开、复选框勾选、按钮切换选中 |
| LV_STATE_FOCUSED | 已聚焦 | 通过按键 / 编码器 / 触摸 / 鼠标 让控件获得焦点 |
| LV_STATE_FOCUS_KEY | 按键聚焦 | 仅通过键盘 / 编码器聚焦(非触摸 / 鼠标) |
| LV_STATE_EDITED | 编辑中 | 编码器正在编辑控件(如调节数值) |
| LV_STATE_HOVERED | 鼠标悬停 | 鼠标悬浮在控件上(当前 LVGL 暂不支持) |
| LV_STATE_PRESSED | 按下中 | 手指 / 鼠标正在按压控件 |
| LV_STATE_SCROLLED | 滚动中 | 控件正在被滚动(列表 / 滚动容器) |
| LV_STATE_DISABLED | 禁用状态 | 控件不可点击、不可交互、变灰失效 |
| LV_STATE_USER_1~4 | 自定义状态 | 留给用户自己定义的 4 个扩展状态 |