引言
LVGL 編程思想
LVGL 採用的是面向對象的編程思想,以抽象的類來實例化不同的對象(部件)
舉例
實現流程
C 語言中沒有“類”的概念,LVGL 以結構體的形式來實現“類”的思想。
過程:
- 使用
lv_obj_t結構體實例化一個具體的對象:lv_obj(基礎對象),默認就是以當前活動的屏幕作為基礎對象。- 這個基礎對象作為父對象衍生出更多的子對象:
lv_switch、lv_lable、lv_slider...這些部件。- 父對象衍生出這些子對象後,子對象就會繼承很多父對象的屬性以及行為,後面就可以用一套同意的 api 函數對這些屬性和行為進行管理。
void my_gui(void)
{
lv_obj_t* switch1 = lv_switch_create(lv_scr_act()); // 創建一個在當前活動屏幕作為父對象的子對象開關switch1
lv_obj_set_size(switch_obj, 120, 60); // 設置開關部件大小
lv_obj_t* switch2 = lv_switch_create(switch1); // 可以選擇活動屏幕或者前面的switch1來繼承,若選擇了switch2則與switch2只有命令關係,與活動屏幕才是父子關係
}
現象:
父子對象規律
- 用一個父對象創建出一個子對象時,父對象就是子對象的容器,子對象裝在父對象中。
- 用一個父對象創建出一個子對象時,子對象默認創建在父對象的左上角。
基礎對象簡介
基礎對象(lv_obj)可以作為父對象,來創建其他對象,同時也可以作為部件使用。
舉例
void my_gui(void)
{
lv_obj_t* obj1 = lv_obj_create(lv_scr_act());
lv_obj_set_size(obj1, 300, 400);
}
現象:
父對象和子對象的關係
舉例
void my_gui(void)
{
lv_obj_t* obj1 = lv_obj_create(lv_scr_act());
lv_obj_set_size(obj1, 300, 300);
lv_obj_set_pos(obj1, 20, 20);
lv_obj_t *obj2 = lv_obj_create(obj1);
lv_obj_set_pos(obj2, 150, 150);
}
現象:
注意,不顯示的區域可以拖動控件畫面來看。
部件的基本屬性
大小
部件大小(size)相關 API 函數
設置寬度:lv_obj_set_width(obj, new_width);
設置高度:lv_obj_set_height(obj, new_height);
同時設置寬度、高度:lv_obj_set_size(obj, new_width, new_height);
舉例
lv_obj_t* obj1 = lv_obj_create(lv_scr_act());
lv_obj_set_width(obj1, 200);
lv_obj_set_height(obj1, 400);
現象:
位置
部件大小(size)相關 API 函數
設置X軸座標:lv_obj_set_x(obj, new_x);
設置Y軸座標:lv_obj_set_y(obj, new_y);
同時設置X、Y軸座標:lv_obj_set_pos(obj, new_x, new_y);
舉例
lv_obj_t* obj1 = lv_obj_create(lv_scr_act());
lv_obj_set_width(obj1, 200);
lv_obj_set_height(obj1, 400);
現象:
對齊
博客導航
博客導航