之前学过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);
版权归原作者 山、 所有, 如有侵权,请联系我们删除。