LVGL8.1版本笔记

这篇具有很好参考价值的文章主要介绍了LVGL8.1版本笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前学过LVGL6,现在版本更新到LVGL8了,学习下新版本,本文主要是记录一些LVGL8的新特性,区别和lvgl6的不同之处 。
lv_task_handler()的作用:
链接: lv_task_handler()是什么,lvgl到底在while(1)中做了什么
总结:lv_task_handler()中,调用lv_indev_read_task()来处理输入信息,当没有输入时,while(1)在做空循环,当有输入时,运行lv_hal_indev.c #149 _lv_indev_read(),调用之前注册的输入驱动回调函数,获取数据,然后调用lv_refr.c #177 _lv_disp_refr_task()来执行刷新操作,刷新时首先调用绘图函数,将内存填充好,之后刷新过程会调用之前注册到显示驱动的回调函数,将相应内容刷到对应显示驱动上,刷新结束,进行下一次的循环
————————————————
版权声明:本文为CSDN博主「hebao0」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46338291/article/details/121626741
属性:
设置对象的属性通过一个函数传入不同的参数来实现
lv_obj_add/clear_flag(obj,LV_OBJ_FLAG...)
FLAG分类:
LV_OBJ_FLAG_HIDDEN 隐藏对象。 (就像它根本不存在一样)
LV_OBJ_FLAG_CLICKABLE 使输入设备可点击对象
LV_OBJ_FLAG_CLICK_FOCUSABLE 单击时将焦点状态添加到对象
LV_OBJ_FLAG_CHECKABLE 对象被点击时切换选中状态
LV_OBJ_FLAG_SCROLLABLE 使对象可滚动
LV_OBJ_FLAG_SCROLL_ELASTIC 允许在内部滚动但速度较慢
LV_OBJ_FLAG_SCROLL_MOMENTUM 在“抛出”时使对象滚动得更远
LV_OBJ_FLAG_SCROLL_ONE 只允许滚动一个可捕捉的孩子
LV_OBJ_FLAG_SCROLL_CHAIN 允许将滚动传播到父级
LV_OBJ_FLAG_SCROLL_ON_FOCUS 自动滚动对象以使其在聚焦时可见
LV_OBJ_FLAG_SNAPPABLE 如果在父对象上启用了滚动捕捉,它可以捕捉到这个对象
LV_OBJ_FLAG_PRESS_LOCK 保持对象被按下,即使按下从对象上滑动
LV_OBJ_FLAG_EVENT_BUBBLE 也将事件传播给父级
LV_OBJ_FLAG_GESTURE_BUBBLE 将手势传播给父级
LV_OBJ_FLAG_ADV_HITTEST 允许执行更准确的命中(点击)测试。例如。考虑圆角。
LV_OBJ_FLAG_IGNORE_LAYOUT 使对象可以通过布局定位
LV_OBJ_FLAG_FLOATING 父滚动时不滚动对象,忽略布局
LV_OBJ_FLAG_LAYOUT_1 自定义标志,可供布局免费使用
LV_OBJ_FLAG_LAYOUT_2 自定义标志,可供布局免费使用
LV_OBJ_FLAG_WIDGET_1 自定义标志,小部件免费使用
LV_OBJ_FLAG_WIDGET_2 自定义标志,小部件免费使用
LV_OBJ_FLAG_USER_1 自定义标志,用户免费使用
LV_OBJ_FLAG_USER_2 自定义标志,用户免费使用
LV_OBJ_FLAG_USER_3 自定义标志,用户免费使用
LV_OBJ_FLAG_USER_4 自定义标志,由用户部分免费使用。
示例:
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);//隐藏对象
lv_obj_clear_flag(obj, LV_OBJ_FLAG_CLICKABLE);//设置对象不可点击

样式style
lvgl8的样式更加的方便,分为普通样式和本地样式,
普通样式和之前的一样,都要先定义在设置,
本地样式不用,直接对obj的默认样式进行更改,
样式创建出来通过lv_style_init(&style);初始化
样式的设置都是同个函数实现的,不同于之前的结构体赋值
例如:lv_style_set_XXX(&style,value);
本地样式函数:lv_obj_set_style_xxx(obj,value,select);
给目标设置样式函数:lv_obj_add_style(obj,&style,selector);
para_3是obj的状态例如默认是0,就是默认状态,也称为部分(path)
LV_STATE_PRESSED是按下时的状态,就是obj按下时的样式设置
新增了样式过渡,
lvgl8的样式改变的还是很大的,而且更加方便了,尤其是本地样式,直接改变空间的默认样式,不需要占用额外的空间保存样式了。

图片按钮
lvgl8的图片按钮好像只能是设置三种图片源的那种创建,只有一种的我没找到他的函数
通过样式过渡,用一张图片就简单实现的之前的图片按钮的按下情景

添加事件

lv_obj_add_event_cb(obj, my_event_cb_1, LV_EVENT_CLICKED, user_para);
lv_obj_add_event_cb(obj, my_event_cb_2, LV_EVENT_PRESSED, NULL);
lv_obj_add_event_cb(obj, my_event_cb_3, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num1);
lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num2);

事件的回调函数参数只有event一个了,但是可以再内部调用函数判断obj
static void imgbtn_first_cb(lv_event_t* event)参数不是指针类型会有warning
可以在事件回调函数中获取发生事件的obj = lv_event_get_target(event);
lv_event_t 是传递给事件回调的唯一参数,它包含有关事件的所有数据。可以从中获得以下值:
lv_event_get_code(e) 获取触发的事件代码
lv_event_get_target(e) 获取事件发送到(关联)的对象
lv_event_get_original_target(e) 获取事件最初发送到的对象(与 lv_event_get_target 不同,如果 event bubbling 被启用)
lv_event_get_user_data(e) 获取作为lv_obj_add_event_cb的最后一个参数传递的指针。
lv_event_get_param(e) 获取作为lv_event_send的最后一个参数传递的参数
添加事件不能用与操作,要另外写一次函数

删除了lv_cont控件,好像是用lv_obj_create();代替创建一个矩形对象

lbgl8可以直接显示数字,lv_label_set_text_fmt(label,"%d",100);
之前的版本不知道有没有这个函数,这样就可以直接用结构体数据了
lv_label_set_text_fmt(lab, "Item %d", i);类似printf()函数,可以用这个同时显示字符和数字
%s,%d,%f等等都可以用lv_label_set_text_fmt(label1,"%s\r\n%d\n","hello",520);这样字符串和数字就都可以直接显示了,

之前用lv_list做菜单,lvgl8他有lv_menu控件,可以直接生成menu,好像8.2版本才有。

menu控件是8.2版本才有的,目前使用的是8.1版本,所以要移植过来
但是移植过来轴有warning,虽然功能可以实现,但是对于微型强迫症的我的来说不好
https://blog.csdn.net/mygod2008ok/article/details/123470145
这个是8.2版本在vs2022上的仿真环境搭建,以后有机会的搞一下,

demo.h头文件中包含了lv_menu.h就没有warning

menu的初始页面返回键通过lv_menu_set_mode_root_back_btn(menu,flag)设置
LV_MENU_ROOT_BACK_BTN_DISABLED
LV_MENU_ROOT_BACK_BTN_ENABLED
常用的API
lv_menu_page_create(menu, title)创建新的空菜单页,可以添加任意小控件
lv_menu_set_page(menu, page)设置菜单的主界面
lv_menu_set_sidebar_page(menu, page)设置侧边栏
lv_menu_set_load_page_event(menu, obj, new page).连接两个页面
lv_menu_cont_create(parent page) 创建新的容器
lv_menu_section_create(parent page) 创建新的空区域
lv_menu_separator_create(parent page) 创建分隔符
lv_menu_set_mode_header(lv_obj_t *obj, lv_menu_mode_header_t mode_header)设置标题的状态
lv_menu_set_load_page_event(lv_obj_t *menu, lv_obj_t *obj, lv_obj_t *page)将菜单添加到菜单项

当主栏或侧边栏的返回btn按下时发送LV_EVENT_CLICKED
主界面的返回按钮通过添加事件的方式设置操作
例如:lv_obj_add_event_cb(menu,back_event_handler,LV_EVENT_CLICKED,menu);

menu的子菜单必须在上一级菜单前面进行初始化设置

mbox消息对话框更加方便了
lv_msgbox_create(Parent, "title", "text", btns, close_btn_en);文章来源地址https://www.toymoban.com/news/detail-794237.html

到了这里,关于LVGL8.1版本笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • lvgl8.x 对接实体按键驱动

    lvgl8.x 对接实体按键驱动

    实体按键属于 lvgl 的输入设备中的一种,所以对接外部的硬件实体按键实际上就是为 lvgl 添加输入设备。为 lvgl 添加输入设备需要在 lv_port_indev.c 这个 c 文件中完成, 注意这个文件并不存在于 lvgl src 源码文件夹下,而是位于 examples/porting 文件夹下,在这个目录下官方为我们准

    2024年02月11日
    浏览(8)
  • ESP32开发:IDFV4.4配置LVGL8.3

    ESP32开发:IDFV4.4配置LVGL8.3

    LVGL GITHUB代码仓库如下:https://github.com/lvgl/lvgl/tree/release/v8.3 官方已经在ESP32上移植好的代码demo,目前最新版是LVGL 7.9:https://github.com/lvgl/lv_port_esp32 我们可以将LVGL官方配置好的ESP32 LVGL仓库下载下来,直接编译作为工程使用: 不出问题,可以直接编译成功,如下图: 如果对

    2024年02月15日
    浏览(11)
  • idf lvgl8显示触摸移植,st7789v+cst816

    idf lvgl8显示触摸移植,st7789v+cst816

    用到的所有文件链接 我整理的lvgl文件:https://gitee.com/BHJ2022/lvgl.git gsm项目地址:https://gitee.com/gsm-wheather-project 1)将gsm中的屏幕及触摸驱动(touch_screen文件夹)直接复制到lvgl_disp_indev的component文件中 2)修改touch_screen的cmakelist如图 3)将gsm中的main中的include直接复制到lvgl_disp_

    2024年02月07日
    浏览(6)
  • 国民技术N32G45X移植LVGL8.3+ILI9488

    国民技术N32G45X移植LVGL8.3+ILI9488

    使用的是自制的一块控制板,主控选用的是国民技术的N32G452VEL7芯片,屏幕大小为3.5寸,驱动型号为ILI9488。 从GitHub中获取LVGL码源: GitHub - lvgl/lvgl at release/v8.3 按照下边图示(步骤1-5)选择V8.3版本并进行下载 打开下载好的LVGL-V8.3文件夹,移植LVGL主要就是操作下边这四份文件(/文

    2024年01月16日
    浏览(9)
  • stm32f407移植LVGL8.3.1实况(所有bug调试现场,最终成功点灯)

    stm32f407移植LVGL8.3.1实况(所有bug调试现场,最终成功点灯)

    声明: 本文主要参考 stm32移植lvgl_NULL_1969的博客-CSDN博客_lvgl stm32 及 STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件 ,底层驱动主要采用正点原子触摸屏实验和定时器实验 1.1 主要硬件接口 1.1.1 触摸屏 主要需要触摸屏来实现屏幕的显示及触摸。 触摸屏需要底层的接

    2024年01月16日
    浏览(10)
  • STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件

    STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件

    网上教程那么多,为什么你要写这个教程? 问的好,csnd上很多类似的教程,他们写的都很好,但是有些过于简洁,对刚上手的小伙伴不太友好,移植到一半遇到bug就想放弃。一些第三方的教程很详细,但是由于lvgl的版本迭代很快,移植的过程有了一些变化,所谓失之毫厘差

    2024年02月03日
    浏览(14)
  • lvgl lv_indev_t (一)之 _lv_indev_drv_t 解读

    输入设备驱动句柄,由lv_indev_add()接口注册 lv_indev_type_t type 输入设备类型 *read_cb 获取输入设备数据回调接口 这个回调在输入设备定时任务中周期调用,用来获取输入设备的状态和数据 *feedback_cb 反馈回调接口 这个回调在输入设备有动作时触发事件发送时调用,反馈事件信息

    2024年02月08日
    浏览(12)
  • LVGL:拓展部件——键盘 lv_keyboard

    LVGL:拓展部件——键盘 lv_keyboard

    此控件特点: 特殊Button矩阵: lv_keyboard 本质上是一个经过定制的 按钮矩阵 控件。每个按钮都可以独立触发事件或响应。 预定义的键映射: lv_keyboard 自带了一套预设的 按键布局 和 对应的字符映射表 ,开发者可以根据需要选择或自定义这些键映射。 与 lv_textarea 配合使用:

    2024年03月20日
    浏览(13)
  • LVGL源码分析(1):lv_ll链表的实现

    在LVGL中难免需要用到链表:group中的对象需要用链表来存储,这样可以切换对象的焦点;再比如LVGL内部的定时器,多个定时器也是用链表进行存储的。这篇文章就来分析一下LVGL中链表的源码。 对于链表来说,肯定有一个头指针和一个尾指针,在LVGL中,链表的数据结构如下:

    2024年02月13日
    浏览(8)
  • LVGL core group焦点分组管理(lv_group.c)

    更多源码分析请访问: LVGL 源码分析大全

    2024年02月09日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包