之前學(xué)過(guò)LVGL6,現(xiàn)在版本更新到LVGL8了,學(xué)習(xí)下新版本,本文主要是記錄一些LVGL8的新特性,區(qū)別和lvgl6的不同之處 。
lv_task_handler()的作用:
鏈接: lv_task_handler()是什么,lvgl到底在while(1)中做了什么
總結(jié):lv_task_handler()中,調(diào)用lv_indev_read_task()來(lái)處理輸入信息,當(dāng)沒(méi)有輸入時(shí),while(1)在做空循環(huán),當(dāng)有輸入時(shí),運(yùn)行l(wèi)v_hal_indev.c #149 _lv_indev_read(),調(diào)用之前注冊(cè)的輸入驅(qū)動(dòng)回調(diào)函數(shù),獲取數(shù)據(jù),然后調(diào)用lv_refr.c #177 _lv_disp_refr_task()來(lái)執(zhí)行刷新操作,刷新時(shí)首先調(diào)用繪圖函數(shù),將內(nèi)存填充好,之后刷新過(guò)程會(huì)調(diào)用之前注冊(cè)到顯示驅(qū)動(dòng)的回調(diào)函數(shù),將相應(yīng)內(nèi)容刷到對(duì)應(yīng)顯示驅(qū)動(dòng)上,刷新結(jié)束,進(jìn)行下一次的循環(huán)
————————————————
版權(quán)聲明:本文為CSDN博主「hebao0」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_46338291/article/details/121626741
屬性:
設(shè)置對(duì)象的屬性通過(guò)一個(gè)函數(shù)傳入不同的參數(shù)來(lái)實(shí)現(xiàn) lv_obj_add/clear_flag(obj,LV_OBJ_FLAG...)
FLAG分類:
LV_OBJ_FLAG_HIDDEN 隱藏對(duì)象。 (就像它根本不存在一樣)
LV_OBJ_FLAG_CLICKABLE 使輸入設(shè)備可點(diǎn)擊對(duì)象
LV_OBJ_FLAG_CLICK_FOCUSABLE 單擊時(shí)將焦點(diǎn)狀態(tài)添加到對(duì)象
LV_OBJ_FLAG_CHECKABLE 對(duì)象被點(diǎn)擊時(shí)切換選中狀態(tài)
LV_OBJ_FLAG_SCROLLABLE 使對(duì)象可滾動(dòng)
LV_OBJ_FLAG_SCROLL_ELASTIC 允許在內(nèi)部滾動(dòng)但速度較慢
LV_OBJ_FLAG_SCROLL_MOMENTUM 在“拋出”時(shí)使對(duì)象滾動(dòng)得更遠(yuǎn)
LV_OBJ_FLAG_SCROLL_ONE 只允許滾動(dòng)一個(gè)可捕捉的孩子
LV_OBJ_FLAG_SCROLL_CHAIN 允許將滾動(dòng)傳播到父級(jí)
LV_OBJ_FLAG_SCROLL_ON_FOCUS 自動(dòng)滾動(dòng)對(duì)象以使其在聚焦時(shí)可見(jiàn)
LV_OBJ_FLAG_SNAPPABLE 如果在父對(duì)象上啟用了滾動(dòng)捕捉,它可以捕捉到這個(gè)對(duì)象
LV_OBJ_FLAG_PRESS_LOCK 保持對(duì)象被按下,即使按下從對(duì)象上滑動(dòng)
LV_OBJ_FLAG_EVENT_BUBBLE 也將事件傳播給父級(jí)
LV_OBJ_FLAG_GESTURE_BUBBLE 將手勢(shì)傳播給父級(jí)
LV_OBJ_FLAG_ADV_HITTEST 允許執(zhí)行更準(zhǔn)確的命中(點(diǎn)擊)測(cè)試。例如。考慮圓角。
LV_OBJ_FLAG_IGNORE_LAYOUT 使對(duì)象可以通過(guò)布局定位
LV_OBJ_FLAG_FLOATING 父滾動(dòng)時(shí)不滾動(dòng)對(duì)象,忽略布局
LV_OBJ_FLAG_LAYOUT_1 自定義標(biāo)志,可供布局免費(fèi)使用
LV_OBJ_FLAG_LAYOUT_2 自定義標(biāo)志,可供布局免費(fèi)使用
LV_OBJ_FLAG_WIDGET_1 自定義標(biāo)志,小部件免費(fèi)使用
LV_OBJ_FLAG_WIDGET_2 自定義標(biāo)志,小部件免費(fèi)使用
LV_OBJ_FLAG_USER_1 自定義標(biāo)志,用戶免費(fèi)使用
LV_OBJ_FLAG_USER_2 自定義標(biāo)志,用戶免費(fèi)使用
LV_OBJ_FLAG_USER_3 自定義標(biāo)志,用戶免費(fèi)使用
LV_OBJ_FLAG_USER_4 自定義標(biāo)志,由用戶部分免費(fèi)使用。
示例:lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
//隱藏對(duì)象lv_obj_clear_flag(obj, LV_OBJ_FLAG_CLICKABLE);
//設(shè)置對(duì)象不可點(diǎn)擊
樣式style
lvgl8的樣式更加的方便,分為普通樣式和本地樣式,
普通樣式和之前的一樣,都要先定義在設(shè)置,
本地樣式不用,直接對(duì)obj的默認(rèn)樣式進(jìn)行更改,
樣式創(chuàng)建出來(lái)通過(guò)lv_style_init(&style);
初始化
樣式的設(shè)置都是同個(gè)函數(shù)實(shí)現(xiàn)的,不同于之前的結(jié)構(gòu)體賦值
例如:lv_style_set_XXX(&style,value);
本地樣式函數(shù):lv_obj_set_style_xxx(obj,value,select);
給目標(biāo)設(shè)置樣式函數(shù):lv_obj_add_style(obj,&style,selector);
para_3是obj的狀態(tài)例如默認(rèn)是0,就是默認(rèn)狀態(tài),也稱為部分(path)
LV_STATE_PRESSED是按下時(shí)的狀態(tài),就是obj按下時(shí)的樣式設(shè)置
新增了樣式過(guò)渡,
lvgl8的樣式改變的還是很大的,而且更加方便了,尤其是本地樣式,直接改變空間的默認(rèn)樣式,不需要占用額外的空間保存樣式了。
圖片按鈕
lvgl8的圖片按鈕好像只能是設(shè)置三種圖片源的那種創(chuàng)建,只有一種的我沒(méi)找到他的函數(shù)
通過(guò)樣式過(guò)渡,用一張圖片就簡(jiǎn)單實(shí)現(xiàn)的之前的圖片按鈕的按下情景
添加事件
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);
事件的回調(diào)函數(shù)參數(shù)只有event一個(gè)了,但是可以再內(nèi)部調(diào)用函數(shù)判斷objstatic void imgbtn_first_cb(lv_event_t* event)
參數(shù)不是指針類型會(huì)有warning
可以在事件回調(diào)函數(shù)中獲取發(fā)生事件的obj = lv_event_get_target(event);
lv_event_t
是傳遞給事件回調(diào)的唯一參數(shù),它包含有關(guān)事件的所有數(shù)據(jù)??梢詮闹蝎@得以下值:lv_event_get_code(e)
獲取觸發(fā)的事件代碼lv_event_get_target(e)
獲取事件發(fā)送到(關(guān)聯(lián))的對(duì)象lv_event_get_original_target(e)
獲取事件最初發(fā)送到的對(duì)象(與 lv_event_get_target
不同,如果 event bubbling
被啟用)lv_event_get_user_data(e)
獲取作為lv_obj_add_event_cb
的最后一個(gè)參數(shù)傳遞的指針。lv_event_get_param(e)
獲取作為lv_event_send
的最后一個(gè)參數(shù)傳遞的參數(shù)
添加事件不能用與操作,要另外寫一次函數(shù)
刪除了lv_cont控件,好像是用lv_obj_create();
代替創(chuàng)建一個(gè)矩形對(duì)象
lbgl8可以直接顯示數(shù)字,lv_label_set_text_fmt(label,"%d",100);
之前的版本不知道有沒(méi)有這個(gè)函數(shù),這樣就可以直接用結(jié)構(gòu)體數(shù)據(jù)了lv_label_set_text_fmt(lab, "Item %d", i);
類似printf()
函數(shù),可以用這個(gè)同時(shí)顯示字符和數(shù)字%s,%d,%f
等等都可以用lv_label_set_text_fmt(label1,"%s\r\n%d\n","hello",520);
這樣字符串和數(shù)字就都可以直接顯示了,
之前用lv_list
做菜單,lvgl8他有l(wèi)v_menu控件,可以直接生成menu,好像8.2版本才有。
menu控件是8.2版本才有的,目前使用的是8.1版本,所以要移植過(guò)來(lái)
但是移植過(guò)來(lái)軸有warning,雖然功能可以實(shí)現(xiàn),但是對(duì)于微型強(qiáng)迫癥的我的來(lái)說(shuō)不好
https://blog.csdn.net/mygod2008ok/article/details/123470145
這個(gè)是8.2版本在vs2022上的仿真環(huán)境搭建,以后有機(jī)會(huì)的搞一下,
demo.h
頭文件中包含了lv_menu.h
就沒(méi)有warning
了
menu的初始頁(yè)面返回鍵通過(guò)lv_menu_set_mode_root_back_btn(menu,flag)
設(shè)置LV_MENU_ROOT_BACK_BTN_DISABLED
LV_MENU_ROOT_BACK_BTN_ENABLED
常用的APIlv_menu_page_create(menu, title)
創(chuàng)建新的空菜單頁(yè),可以添加任意小控件lv_menu_set_page(menu, page)
設(shè)置菜單的主界面lv_menu_set_sidebar_page(menu, page)
設(shè)置側(cè)邊欄lv_menu_set_load_page_event(menu, obj, new page).
連接兩個(gè)頁(yè)面lv_menu_cont_create(parent page)
創(chuàng)建新的容器lv_menu_section_create(parent page)
創(chuàng)建新的空區(qū)域lv_menu_separator_create(parent page)
創(chuàng)建分隔符lv_menu_set_mode_header(lv_obj_t *obj, lv_menu_mode_header_t mode_header)
設(shè)置標(biāo)題的狀態(tài)lv_menu_set_load_page_event(lv_obj_t *menu, lv_obj_t *obj, lv_obj_t *page)
將菜單添加到菜單項(xiàng)
當(dāng)主欄或側(cè)邊欄的返回btn按下時(shí)發(fā)送LV_EVENT_CLICKED
主界面的返回按鈕通過(guò)添加事件的方式設(shè)置操作
例如:lv_obj_add_event_cb(menu,back_event_handler,LV_EVENT_CLICKED,menu);
menu的子菜單必須在上一級(jí)菜單前面進(jìn)行初始化設(shè)置文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-794237.html
mbox消息對(duì)話框更加方便了lv_msgbox_create(Parent, "title", "text", btns, close_btn_en);
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794237.html
到了這里,關(guān)于LVGL8.1版本筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!