LVGL spinbox模块 深入学习

简介:

一:所需软件:

1.电脑仿真软件:CodeBlock ,讲解和代码获取可观看正点原子视频:第15讲 基础篇-LVGL模拟器使用_哔哩哔哩_bilibili

2.界面设计软件:Gui-Guide(直接生成代码,导入到单片机程序即可运行)

二:键盘按键:

导航模式:PgUp 、PgDn 跳转到不同的控件。

编辑模式:键盘上下左右按键:

        左右:修改spinbox光标位置;

        上下:增加(减小)数值。

三:实例演示:(仿真程序+实例图片)

1.最普通

static lv_obj_t * spinbox;


static void lv_spinbox_increment_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_SHORT_CLICKED || code  == LV_EVENT_LONG_PRESSED_REPEAT) {
        lv_spinbox_increment(spinbox);
    }
}

static void lv_spinbox_decrement_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_SHORT_CLICKED || code == LV_EVENT_LONG_PRESSED_REPEAT) {
        lv_spinbox_decrement(spinbox);
    }
}


void lv_example_spinbox_1(void)
{
    spinbox = lv_spinbox_create(lv_scr_act());
    lv_spinbox_set_range(spinbox, -1000, 25000);
    lv_spinbox_set_digit_format(spinbox, 5, 2);
    lv_spinbox_step_prev(spinbox);
    lv_obj_set_width(spinbox, 100);
    lv_obj_center(spinbox);

    lv_coord_t h = lv_obj_get_height(spinbox);

    lv_obj_t * btn = lv_btn_create(lv_scr_act());
    lv_obj_set_size(btn, h, h);
    lv_obj_align_to(btn, spinbox, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
    lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_PLUS, 0);
    lv_obj_add_event_cb(btn, lv_spinbox_increment_event_cb, LV_EVENT_ALL,  NULL);

    btn = lv_btn_create(lv_scr_act());
    lv_obj_set_size(btn, h, h);
    lv_obj_align_to(btn, spinbox, LV_ALIGN_OUT_LEFT_MID, -5, 0);
    lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_MINUS, 0);
    lv_obj_add_event_cb(btn, lv_spinbox_decrement_event_cb, LV_EVENT_ALL, NULL);
}

2.左右侧按键可修改选中位置

添加组后,可使用导航键修改选中控件(按钮等)

static lv_obj_t * spinbox;

static void lv_spinbox_increment_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_SHORT_CLICKED || code  == LV_EVENT_LONG_PRESSED_REPEAT) {
        //lv_spinbox_increment(spinbox);
        lv_spinbox_step_next(spinbox);
    }
}

static void lv_spinbox_decrement_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_SHORT_CLICKED || code == LV_EVENT_LONG_PRESSED_REPEAT) {
        //lv_spinbox_decrement(spinbox);
        lv_spinbox_step_prev(spinbox);
    }
}

void second(void)
{
    spinbox = lv_spinbox_create(lv_scr_act());
    lv_spinbox_set_range(spinbox, 6000, 9999);     //设置数值范围
    lv_spinbox_set_digit_format(spinbox, 4, 4); //共四位,四位整数,最后一个表示整数
    lv_spinbox_set_pos(spinbox,2);
    lv_spinbox_step_prev(spinbox);
    lv_obj_set_width(spinbox, 100);
    lv_obj_center(spinbox);


    lv_coord_t h = lv_obj_get_height(spinbox);

    // +  右边
    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    lv_obj_set_size(btn1, h, h);
    lv_obj_align_to(btn1, spinbox, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
    lv_obj_t * btn_label = lv_label_create(btn1);
    lv_label_set_text(btn_label, ">");
    lv_obj_center(btn_label);
    lv_obj_add_event_cb(btn1, lv_spinbox_increment_event_cb, LV_EVENT_ALL,  NULL);

    //-  左边
    lv_obj_t *btn2 = lv_btn_create(lv_scr_act());
    lv_obj_set_size(btn2, h, h);
    lv_obj_align_to(btn2, spinbox, LV_ALIGN_OUT_LEFT_MID, -5, 0);
    btn_label = lv_label_create(btn2);
    lv_label_set_text(btn_label, "<");
    lv_obj_center(btn_label);
    lv_obj_add_event_cb(btn2, lv_spinbox_decrement_event_cb, LV_EVENT_ALL, NULL);

    //组
    lv_group_t *g = lv_group_create();            //创建组
    lv_group_add_obj(g,btn2);   //-     <        //添加组
    lv_group_add_obj(g,spinbox);
    lv_group_add_obj(g,btn1);   //+     >
    lv_indev_set_group(lv_win32_keypad_device_object,g);
}

3.删除左右按键,选中spinbox时,单击鼠标(或者按enter键)可更改选中位置(鼠标单击向后移一位,长按向前)

static lv_obj_t * spinbox;

static void lv_spinbox_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    switch(code)
    {
        case LV_EVENT_PRESSED:	                        //按下
			lv_spinbox_step_next(spinbox);
            break;
        case LV_EVENT_LONG_PRESSED_REPEAT:		        //长按
			lv_spinbox_step_prev(spinbox);
            break;
        default:
            break;
    }
}

void third(void)
{
    ///spinbox
    spinbox = lv_spinbox_create(lv_scr_act());

    static lv_style_t style_set_spinbox_1_main_main_default;
    if (style_set_spinbox_1_main_main_default.prop_cnt > 1)
        lv_style_reset(&style_set_spinbox_1_main_main_default);
    else
        lv_style_init(&style_set_spinbox_1_main_main_default);
    lv_style_set_border_color(&style_set_spinbox_1_main_main_default, lv_color_make(0x21, 0x95, 0xf6));			//围绕spinbox外部的边框颜色
    lv_style_set_border_width(&style_set_spinbox_1_main_main_default, 2);						//围绕spinbox外部的边框宽度
    lv_style_set_border_opa(&style_set_spinbox_1_main_main_default, 255);						//透明度
    lv_style_set_text_align(&style_set_spinbox_1_main_main_default, LV_TEXT_ALIGN_CENTER);				//spinbox内数字居中
    lv_obj_add_style(spinbox, &style_set_spinbox_1_main_main_default, LV_PART_MAIN|LV_STATE_DEFAULT);

    lv_spinbox_set_range(spinbox, 6000, 9999);     //设置数值范围
    lv_spinbox_set_digit_format(spinbox, 4, 4); //共四位,四位整数,最后一个表示整数
    lv_spinbox_set_pos(spinbox,2);
    lv_spinbox_step_prev(spinbox);
    lv_obj_set_width(spinbox, 100);
    lv_obj_center(spinbox);
    lv_obj_add_event_cb(spinbox, lv_spinbox_event_cb, LV_EVENT_ALL,  NULL);

}

4.删除左右按键且删除选中光标(适合一位或者两位数修改)

static lv_obj_t * spinbox;

void four(void)
{
    spinbox = lv_spinbox_create(lv_scr_act());
    lv_obj_set_pos(spinbox, 50, 50);

    static lv_style_t style_set_spinbox_1_main_main_default;
    if (style_set_spinbox_1_main_main_default.prop_cnt > 1)
        lv_style_reset(&style_set_spinbox_1_main_main_default);
    else
        lv_style_init(&style_set_spinbox_1_main_main_default);
    lv_style_set_border_color(&style_set_spinbox_1_main_main_default, lv_color_make(0x21, 0x95, 0xf6));			//围绕spinbox外部的边框颜色
    lv_style_set_border_width(&style_set_spinbox_1_main_main_default, 2);						//围绕spinbox外部的边框宽度
    lv_style_set_border_opa(&style_set_spinbox_1_main_main_default, 255);						//透明度
    lv_style_set_text_align(&style_set_spinbox_1_main_main_default, LV_TEXT_ALIGN_CENTER);				//spinbox内数字居中
    lv_obj_add_style(spinbox, &style_set_spinbox_1_main_main_default, LV_PART_MAIN|LV_STATE_DEFAULT);

    //spinbox选中位置设置
    static lv_style_t style_set_spinbox_1_main_cursor_default;
    if (style_set_spinbox_1_main_cursor_default.prop_cnt > 1)
        lv_style_reset(&style_set_spinbox_1_main_cursor_default);
    else
        lv_style_init(&style_set_spinbox_1_main_cursor_default);
    lv_style_set_bg_color(&style_set_spinbox_1_main_cursor_default, lv_color_make(0x21, 0x95, 0xf6));			//
    lv_style_set_bg_grad_color(&style_set_spinbox_1_main_cursor_default, lv_color_make(0x21, 0x95, 0xf6));			//设置spinbox选中位置的背景颜色
    lv_style_set_bg_grad_dir(&style_set_spinbox_1_main_cursor_default, LV_GRAD_DIR_NONE);
    lv_style_set_bg_opa(&style_set_spinbox_1_main_cursor_default, 0);						//设置spinbox选中位置的背景透明度
    lv_style_set_text_color(&style_set_spinbox_1_main_cursor_default, lv_color_make(0x00, 0x00, 0x00));			//设置spinbox选中位置的字体颜色
    lv_style_set_text_font(&style_set_spinbox_1_main_cursor_default, & lv_font_montserrat_14);				//设置spinbox选中位置的字体大小
    lv_obj_add_style(spinbox, &style_set_spinbox_1_main_cursor_default, LV_PART_CURSOR|LV_STATE_DEFAULT);


    lv_spinbox_set_range(spinbox, 0, 99);     //设置数值范围
    lv_spinbox_set_digit_format(spinbox, 2, 2); //共四位,四位整数,最后一个表示整数
    lv_spinbox_set_pos(spinbox,2);
    lv_spinbox_step_prev(spinbox);
    lv_obj_set_width(spinbox, 100);

    lv_group_t *g = lv_group_create();
    lv_group_add_obj(g,spinbox);
    lv_indev_set_group(lv_win32_keypad_device_object,g);
}

5.删除spinbox边框

 只需要将透明度从255改变成0即可。

static lv_style_t style_set_spinbox_1_main_main_default;
    if (style_set_spinbox_1_main_main_default.prop_cnt > 1)
        lv_style_reset(&style_set_spinbox_1_main_main_default);
    else
        lv_style_init(&style_set_spinbox_1_main_main_default);
    lv_style_set_border_color(&style_set_spinbox_1_main_main_default, lv_color_make(0x21, 0x95, 0xf6));			//围绕spinbox外部的边框颜色
    lv_style_set_border_width(&style_set_spinbox_1_main_main_default, 2);						//围绕spinbox外部的边框宽度
    lv_style_set_border_opa(&style_set_spinbox_1_main_main_default, 0);						//透明度
    lv_style_set_text_align(&style_set_spinbox_1_main_main_default, LV_TEXT_ALIGN_CENTER);				//spinbox内数字居中
    lv_obj_add_style(spinbox, &style_set_spinbox_1_main_main_default, LV_PART_MAIN|LV_STATE_DEFAULT);

四:GUI-Guide代码示例:

这里只有主体代码

//Write codes set_spinbox_1
ui->set_spinbox_1 = lv_spinbox_create(ui->SetRange);
lv_obj_set_pos(ui->set_spinbox_1, 295, 155);								//设置spinbox位置
lv_obj_set_scrollbar_mode(ui->set_spinbox_1, LV_SCROLLBAR_MODE_OFF);

//Write style state: LV_STATE_DEFAULT for style_set_spinbox_1_main_main_default
static lv_style_t style_set_spinbox_1_main_main_default;
if (style_set_spinbox_1_main_main_default.prop_cnt > 1)
	lv_style_reset(&style_set_spinbox_1_main_main_default);
else
	lv_style_init(&style_set_spinbox_1_main_main_default);
lv_style_set_radius(&style_set_spinbox_1_main_main_default, 5);
lv_style_set_bg_color(&style_set_spinbox_1_main_main_default, lv_color_make(0xff, 0xff, 0xff));
lv_style_set_bg_grad_color(&style_set_spinbox_1_main_main_default, lv_color_make(0xff, 0xff, 0xff));
lv_style_set_bg_grad_dir(&style_set_spinbox_1_main_main_default, LV_GRAD_DIR_NONE);
lv_style_set_bg_opa(&style_set_spinbox_1_main_main_default, 255);
lv_style_set_border_color(&style_set_spinbox_1_main_main_default, lv_color_make(0x21, 0x95, 0xf6));			//围绕spinbox外部的边框颜色
lv_style_set_border_width(&style_set_spinbox_1_main_main_default, 1);						//围绕spinbox外部的边框宽度
lv_style_set_border_opa(&style_set_spinbox_1_main_main_default, 255);						//透明度
lv_style_set_text_color(&style_set_spinbox_1_main_main_default, lv_color_make(0x00, 0x00, 0x00));			//spinbox字体颜色
lv_style_set_text_font(&style_set_spinbox_1_main_main_default, & lv_font_montserrat_14);				//spinbox字体大小
lv_style_set_text_letter_space(&style_set_spinbox_1_main_main_default, 0);					//spinbox字体间距
lv_style_set_text_align(&style_set_spinbox_1_main_main_default, LV_TEXT_ALIGN_CENTER);				//spinbox内数字居中
lv_style_set_pad_left(&style_set_spinbox_1_main_main_default, 0);
lv_style_set_pad_right(&style_set_spinbox_1_main_main_default, 0);
lv_style_set_pad_top(&style_set_spinbox_1_main_main_default, 0);
lv_style_set_pad_bottom(&style_set_spinbox_1_main_main_default, 0);
lv_obj_add_style(ui->set_spinbox_1, &style_set_spinbox_1_main_main_default, LV_PART_MAIN|LV_STATE_DEFAULT);

//spinbox选中位置设置
static lv_style_t style_set_spinbox_1_main_cursor_default;
if (style_set_spinbox_1_main_cursor_default.prop_cnt > 1)
	lv_style_reset(&style_set_spinbox_1_main_cursor_default);
else
	lv_style_init(&style_set_spinbox_1_main_cursor_default);
lv_style_set_bg_color(&style_set_spinbox_1_main_cursor_default, lv_color_make(0x21, 0x95, 0xf6));			//
lv_style_set_bg_grad_color(&style_set_spinbox_1_main_cursor_default, lv_color_make(0x21, 0x95, 0xf6));			//设置spinbox选中位置的背景颜色
lv_style_set_bg_grad_dir(&style_set_spinbox_1_main_cursor_default, LV_GRAD_DIR_NONE);
lv_style_set_bg_opa(&style_set_spinbox_1_main_cursor_default, 255);						//设置spinbox选中位置的背景透明度
lv_style_set_text_color(&style_set_spinbox_1_main_cursor_default, lv_color_make(0xff, 0xff, 0xff));			//设置spinbox选中位置的字体颜色
lv_style_set_text_font(&style_set_spinbox_1_main_cursor_default, & lv_font_montserrat_14);				//设置spinbox选中位置的字体大小
lv_obj_add_style(ui->set_spinbox_1, &style_set_spinbox_1_main_cursor_default, LV_PART_CURSOR|LV_STATE_DEFAULT);

//Write style state: LV_STATE_DEFAULT for style_set_spinbox_1_extra_btns_main_default
static lv_style_t style_set_spinbox_1_extra_btns_main_default;
if (style_set_spinbox_1_extra_btns_main_default.prop_cnt > 1)
	lv_style_reset(&style_set_spinbox_1_extra_btns_main_default);
else
	lv_style_init(&style_set_spinbox_1_extra_btns_main_default);
lv_style_set_radius(&style_set_spinbox_1_extra_btns_main_default, 5);
lv_style_set_bg_color(&style_set_spinbox_1_extra_btns_main_default, lv_color_make(0x21, 0x95, 0xf6));
lv_style_set_bg_grad_color(&style_set_spinbox_1_extra_btns_main_default, lv_color_make(0x21, 0x95, 0xf6));
lv_style_set_bg_grad_dir(&style_set_spinbox_1_extra_btns_main_default, LV_GRAD_DIR_NONE);
lv_style_set_bg_opa(&style_set_spinbox_1_extra_btns_main_default, 255);
lv_style_set_border_color(&style_set_spinbox_1_extra_btns_main_default, lv_color_make(0x21, 0x95, 0xf6));
lv_style_set_border_width(&style_set_spinbox_1_extra_btns_main_default, 0);
lv_style_set_border_opa(&style_set_spinbox_1_extra_btns_main_default, 255);
lv_style_set_text_color(&style_set_spinbox_1_extra_btns_main_default, lv_color_make(0xff, 0xff, 0xff));
lv_style_set_text_font(&style_set_spinbox_1_extra_btns_main_default, & lv_font_montserrat_14);
lv_obj_set_width(ui->set_spinbox_1, 110);										//spinbox 尺寸
lv_obj_set_height(ui->set_spinbox_1, 30);										//spinbox 尺寸
lv_spinbox_set_digit_format(ui->set_spinbox_1, 4, 4);									//spinbox有几位数字,四位数,四位都是整数
lv_spinbox_ set(ui->set_spinbox_1, 0, 9999);									//spinbox范围
lv_spinbox_set_cursor_pos(ui->set_spinbox_1,3);									//设置光标位置(选中位置)
set_spinbox_1 = ui->set_spinbox_1;
lv_coord_t set_spinbox_1_h = lv_obj_get_height(ui->set_spinbox_1);
//lv_obj_add_event_cb(ui->set_spinbox_1, lv_set_spinbox_1_decrement_event_cb, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui->set_spinbox_1, event_cb, LV_EVENT_ALL, NULL);							//给spinbox添加事件
	
//spinbox的左右按钮;		
ui->set_spinbox_1_btn = lv_btn_create(ui->SetRange);
lv_obj_set_size(ui->set_spinbox_1_btn, set_spinbox_1_h, set_spinbox_1_h);
lv_obj_align_to(ui->set_spinbox_1_btn, ui->set_spinbox_1, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
//lv_obj_set_style_bg_img_src(ui->set_spinbox_1_btn, LV_SYMBOL_PLUS, 0);						//spinbox左右按钮填充+-号
lv_obj_t * btn_label = lv_label_create(ui->set_spinbox_1_btn);								//按钮内填充其他符号
lv_label_set_text(btn_label, ">");											//
lv_obj_center(btn_label);											//居中
lv_obj_add_event_cb(ui->set_spinbox_1_btn,lv_spinbox_increment_event_cb, LV_EVENT_ALL, NULL);
		
//spinbox的左右按钮;	
ui->set_spinbox_1_btn_minus = lv_btn_create(ui->SetRange);
lv_obj_set_size(ui->set_spinbox_1_btn_minus, set_spinbox_1_h, set_spinbox_1_h);
lv_obj_align_to(ui->set_spinbox_1_btn_minus, ui->set_spinbox_1, LV_ALIGN_OUT_LEFT_MID, -5, 0);
//lv_obj_set_style_bg_img_src(ui->set_spinbox_1_btn_minus, LV_SYMBOL_MINUS, 0);					//spinbox左右按钮填充+-号
btn_label = lv_label_create(ui->set_spinbox_1_btn_minus);
lv_label_set_text(btn_label, "<");
lv_obj_center(btn_label);
lv_obj_add_event_cb(ui->set_spinbox_1_btn_minus, lv_spinbox_decrement_event_cb, LV_EVENT_ALL, NULL);
lv_obj_add_style(ui->set_spinbox_1_btn, &style_set_spinbox_1_extra_btns_main_default, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_add_style(ui->set_spinbox_1_btn_minus, &style_set_spinbox_1_extra_btns_main_default, LV_PART_MAIN|LV_STATE_DEFAULT);

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值