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)
扫描二维码关注公众号,回复: 9824749 查看本文章

案例以及设计源码

           设计两个按键,一个实现按键操作,一个实现开关反转操作。

  •    设计的流程

创建一个按键----->是否使能开关属性功能-------->配置其显示标签-------->配置其风格------->设置按键显示位置大小-------->设置其回调函数。

  •      设计代码

创建了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

                                                                                 按下开关

发布了17 篇原创文章 · 获赞 5 · 访问量 5629

猜你喜欢

转载自blog.csdn.net/weixin_43854435/article/details/101056823