LittlevGl---按鍵---5

  • 目的

     學習LittlevGL的“按鍵”模型使用方法。

  • 功能描述

     對於button,在littlevGL中有兩大類型。一個是作爲按鍵,一個是作爲開關。

     按鍵,即像普通的鍵盤或者遙控器之類的按鈕一樣,按下了,手鬆開後,此按鍵會恢復出釋放的狀態,表示一次單擊。

     開關,相當於一些撥碼開關,或者一些電源的一些按鈕,按下後,保持按下的狀態,再按一次時,恢復釋放的狀態。

      默認情況下,button就是key功能,只有使能了開關功能,才能做開關作用。

      開關可以綁定一些事件。即當開關按下後,會立刻產生一些信號,然後喚醒對應的事件函數,在此函數中,根據具體事件來響應對應的處理。如同實際gpu的io中斷一樣。

按鍵的5種狀態:按下和釋放,按下釋放動態,未使能。

  • LV_BTN_STATE_REL Released state
  • LV_BTN_STATE_PR Pressed state
  • LV_BTN_STATE_TGL_REL Toggled released state
  • LV_BTN_STATE_TGL_PR Toggled pressed state
  • LV_BTN_STATE_INA Inactive state

   用戶可以採用

     lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL)設置按鈕的狀態

    用戶可以通過設計style的方式控制按鍵的風格,也可以不用設計,採用默認值即可。具體見案例和後續相關函數介紹。

主要功能函數描述

  • 按鍵創建

    lv_obj_t *lv_btn_create(lv_obj_t *par, constlv_obj_t *copy)

    同其他部件對象一樣:

    par:爲當前要創建按鈕的父類,即父窗口,按鍵將顯示的地方;

    copy:模擬的對象,即要創建出的btn可以複製已用的按鍵特性,如果爲NULL,則是默認繼承父類部分屬性;
  • 按鍵的功能屬性設置和獲取以及開關狀態配置

    void lv_btn_set_toggle(lv_obj_t *btn, bool tgl)//設置

    前文已述,按鍵有兩中功能,一個就是按鍵,一個是開關。具體見前文。默認情況下,按鍵就是按鍵功能。

    btn:要配置的按鍵;
    tgl:如果爲true,則是開關功能,如果是false,則是按鍵功能。

    bool lv_btn_get_toggle(constlv_obj_t *btn)//獲取配置

    void lv_btn_toggle(lv_obj_t *btn)//反轉一次,即當使能toggle時,每調用一次此函數,按鍵狀態會發生翻轉一次
  • 按鍵的風格設置和獲取

    void lv_btn_set_style(lv_obj_t *btn, lv_btn_style_ttype, const lv_style_t *style)
    這裏不再累述,前面章節已經有所描述。
    中間的變量爲配置那種state下的風格,即是按下時的按鈕風格還是釋放時,還是動態時。

    const lv_style_t *lv_btn_get_style(constlv_obj_t *btn, lv_btn_style_ttype)//獲取
  • 按鍵的內部框架和對子元素設置和獲取

    static void lv_btn_set_layout(lv_obj_t *btn, lv_layout_tlayout)//設置其內部框架
            按鍵內部元素的顯示框架
    staticlv_layout_tlv_btn_get_layout(constlv_obj_t *btn)


    static void lv_btn_set_fit4(lv_obj_t *btn, lv_fit_tleft, lv_fit_tright, lv_fit_ttop, lv_fit_tbottom)
           爲按鍵4個方向的改變規則,這種改變是根據內部元素來自動完成
    

    static void lv_btn_set_fit2(lv_obj_t *btn, lv_fit_thor, lv_fit_tver)
            爲水平和垂直兩個

    static void lv_btn_set_fit(lv_obj_t *btn, lv_fit_tfit)
            爲4個方向一個規則

    staticlv_fit_tlv_btn_get_fit_left(constlv_obj_t *btn)
    staticlv_fit_tlv_btn_get_fit_right(constlv_obj_t *btn)
    staticlv_fit_tlv_btn_get_fit_top(constlv_obj_t *btn)
    staticlv_fit_tlv_btn_get_fit_bottom(constlv_obj_t *btn)

 

案例以及設計源碼

           設計兩個按鍵,一個實現按鍵操作,一個實現開關反轉操作。

  •    設計的流程

創建一個按鍵----->是否使能開關屬性功能-------->配置其顯示標籤-------->配置其風格------->設置按鍵顯示位置大小-------->設置其回調函數。

  •      設計代碼

創建了ljy_button.h和ljy_button.c兩個文件,並在main函數調用DrawButton。具體怎麼使用見前面章節。


#include "ljy_button.h"

#include "lvgl/lvgl.h"
#include <stdio.h>

static lv_obj_t * label2;



static void BttonEventCb(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED) {//點擊事件
        printf("Clicked\n");
    }
    else if(event == LV_EVENT_VALUE_CHANGED) {//開關切換事件
        printf("Toggled\n");
		if(lv_btn_get_state(obj) == LV_BTN_STATE_REL){
			lv_label_set_text(label2, "OFF");
		}else{
			lv_label_set_text(label2, "ON");
		}
    }
}	



void DrawButton()
{
	//1. 按鍵1
    lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL);//在當前screen對象上創建btn1
    lv_obj_set_event_cb(btn1, BttonEventCb);//設置當前按鍵的 事件回調函數
    lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, -40);//配置btn1在其父類(screen)中顯示位置
	
	
    lv_obj_t * label1;//創建按鍵1上面顯示的label1
    label1 = lv_label_create(btn1, NULL);//在父類btn1中創建label1實體
    lv_label_set_text(label1, "Button");//配置label的text	

	//2. 按鍵2
    lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), NULL);
    lv_obj_set_event_cb(btn2, BttonEventCb);
    lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 0, 40);

    lv_btn_set_toggle(btn2, true);	//使能其爲開關按鈕,非按鍵按鈕,默認爲釋放狀態
	lv_btn_toggle(btn2); //變爲按下狀態,每調用一次此函數,狀態state會發生反轉
	lv_btn_set_fit2(btn2, LV_FIT_NONE, LV_FIT_TIGHT);//配置btn的自適應大小,其子對象都適應其高度

	
   
    label2 = lv_label_create(btn2, NULL);
    lv_label_set_text(label2, "Toggled");	



}

 

結論

                                                                        按下button

                                                                                 按下開關

 

 

 

 

 

 

 

 

 

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