0


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);
标签: ui html

本文转载自: https://blog.csdn.net/wdsclm937256/article/details/125876488
版权归原作者 山、 所有, 如有侵权,请联系我们删除。

“LVGL8.1版本笔记”的评论:

还没有评论