littlevGL-如何添加自己程序--2

如何添加自己程序

一、 目的

 前一章移植了開發環境,當前這章節描述如何搭建自己的案列。

二、 描述

對於任何一個UI圖像系統而言,它只是一個人機界面圖形處理一個邏輯,主要處理的是圖像顯示,成像效果,輸入操作(觸摸,鼠標,感應等),以便完成人與機的最直接交互。    

 實際操作中,UI很多工作是功能方面,與實際硬件無關,如圖像渲染,各種模塊的繪製,比如按鍵等,這些操作屬於功能,而不和具體的平臺有關係。如果將這些即在各種設備中實現的UI提取出來,剝離於和硬件平臺,獨立於外。用戶只需要移植必要的和硬件相關的接口,則那些UI可以各種平臺公用。
 
 所以無論你是andriod還是qt,還是我們的littlegl,最基本的需要給UI實現一些必要的平臺相關的接口,則這些UI系統已經由前人實現的各種功能直接提取用,比如3d動畫,比如各種模塊等。
 
 對於UI而言,實現的最基本的接口爲兩大類,一個是當前要依託的顯示平臺接口,另一個是輸入設備接口。這一部分後面有時間會具體描述。
 
 同時會根據平臺的設備具體情況,在lv_conf.h中配置一些必要的參數,如顯示屏的大小,支持的顏色格式。顯示任務刷新的頻率等。

在這裏插入圖片描述

標題

實現的圖形系統,大體可以分爲上圖中的3層。應用層爲用戶採用各種API實現的方案。這個API主要是由LittlevGL庫和用戶依託的操作系統的功能函數實現(驅動會加載到操作系統中實現)。
這裏的drivers主要填充於操作系統的功能應用中,或LittlevGL的接口函數中。用戶在移植LittlevGL時,需要調用LittlevGL的顯示和輸入設備驅動註冊接口函數,即HAL(硬件抽象層)。此部分在後面有時間編寫移植部分描述。

三、 實現案例

 打開pc_simulator_sdl_visual_studio工程後,按下“F5”按鍵會看到以下demo界面。

在這裏插入圖片描述

 用戶想實現自己的程序,比如一個按鍵顯示,那麼可以屏蔽掉demo_create()函數,並在此位置調用自己想要實現的按鍵函數。代碼如下:


/*按鍵的迴應事件,即回調函數*/
void BtnEventCb(lv_obj_t * btn, lv_event_t event)
{
	if (event == LV_EVENT_CLICKED) {
		printf("撈金魚clicked!\r\n");
	}
}

void ButtonTest()
{
	//1、創建一個名字爲Button的按鈕
	lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);     /*Add a button the current screen*/
	lv_obj_set_pos(btn, 10, 10);                            /*Set its position*/
	lv_obj_set_size(btn, 100, 50);                          /*Set its size*/
	lv_obj_t * label = lv_label_create(btn, NULL);
	lv_label_set_text(label, "Button");

//2. 配置此button的釋放時風格
static lv_style_t style_btn_rel;
lv_style_copy(&style_btn_rel, &lv_style_plain);         /*Initialize from a built-in style*/
style_btn_rel.body.border.color = lv_color_hex3(0x269);//顏色
style_btn_rel.body.border.width = 1;
style_btn_rel.body.main_color = lv_color_hex3(0xADF);
style_btn_rel.body.grad_color = lv_color_hex3(0x46B);
style_btn_rel.body.shadow.width = 4;
style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
style_btn_rel.body.radius = LV_RADIUS_CIRCLE;
style_btn_rel.text.color = lv_color_hex3(0xDEF);

//3. 配置此button的按下風格
static lv_style_t style_btn_pr;                         /*A variable to store the pressed style*/
lv_style_copy(&style_btn_pr, &style_btn_rel);           /*Initialize from the released style*/
style_btn_pr.body.border.color = lv_color_hex3(0x46B);
style_btn_pr.body.main_color = lv_color_hex3(0x8BD);
style_btn_pr.body.grad_color = lv_color_hex3(0x24A);
style_btn_pr.body.shadow.width = 2;
style_btn_pr.text.color = lv_color_hex3(0xBCD);

//4. 裝配風格
lv_btn_set_style(btn, LV_BTN_STYLE_REL, &style_btn_rel);    /*Set the button's released style*/
lv_btn_set_style(btn, LV_BTN_STYLE_PR, &style_btn_pr);      /*Set the button's pressed style*/

//5. 給此按鍵綁定一個響應事件【回調函數】
lv_obj_set_event_cb(btn, BtnEventCb);

}

int main(int argc, char** argv)
{
/Initialize LittlevGL/
lv_init();

/*Initialize the HAL for LittlevGL*/
hal_init();

/*
 * Demo, benchmark, tests and tutorial.
 *
 * Uncomment any one (and only one) of the functions below to run that
 * particular demo, test or tutorial.
 */

//DrawArc();

//ButtonTest(); SliderInit(); ListInit();
ButtonTest();
//demo_create();
//benchmark_create();
//lv_test_theme_1(lv_theme_night_init(210, NULL));
//lv_test_theme_1(lv_theme_night_init(100, NULL));
//lv_test_theme_1(lv_theme_material_init(210, NULL));
//lv_test_theme_1(lv_theme_alien_init(210, NULL));
//lv_test_theme_1(lv_theme_zen_init(210, NULL));
//lv_test_theme_1(lv_theme_nemo_init(210, NULL));
//lv_test_theme_1(lv_theme_mono_init(210, NULL));
//lv_test_theme_1(lv_theme_default_init(210, NULL));
//lv_tutorial_keyboard(kb_indev);

while (1) {
    /* Periodically call the lv_task handler.
    * It could be done in a timer interrupt or an OS task too.*/
    lv_task_handler();
    Sleep(8);       /*Just to let the system breathe */
}

return;

}

標題四、 運行結果

 當用戶按下按鍵時,會打印對應應答信息.

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章