動態

詳情 返回 返回

【LVGL】部件 - 基礎對象 - 動態 詳情

引言

LVGL 編程思想

LVGL 採用的是面向對象的編程思想,以抽象的類來實例化不同的對象(部件)

舉例

image

實現流程

C 語言中沒有“類”的概念,LVGL 以結構體的形式來實現“類”的思想。

過程:

  1. 使用lv_obj_t結構體實例化一個具體的對象:lv_obj(基礎對象),默認就是以當前活動的屏幕作為基礎對象。
  2. 這個基礎對象作為父對象衍生出更多的子對象:lv_switchlv_lablelv_slider...這些部件。
  3. 父對象衍生出這些子對象後,子對象就會繼承很多父對象的屬性以及行為,後面就可以用一套同意的 api 函數對這些屬性和行為進行管理。

image

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只有命令關係,與活動屏幕才是父子關係
}

現象:

image

父子對象規律

  1. 用一個父對象創建出一個子對象時,父對象就是子對象的容器,子對象裝在父對象中。
  2. 用一個父對象創建出一個子對象時,子對象默認創建在父對象的左上角。

基礎對象簡介

基礎對象(lv_obj)可以作為父對象,來創建其他對象,同時也可以作為部件使用。

image

舉例

void my_gui(void)
{
    lv_obj_t* obj1 = lv_obj_create(lv_scr_act());
    lv_obj_set_size(obj1, 300, 400);
}

現象:

image

父對象和子對象的關係

image

舉例

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

現象:
注意,不顯示的區域可以拖動控件畫面來看。

image

部件的基本屬性

image

大小

image

部件大小(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);

現象:

image

位置

image


image

部件大小(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);

現象:

image

對齊

博客導航

博客導航

Add a new 評論

Some HTML is okay.