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);

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值