简介:
一:所需软件:
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);