LVGL_基础控件滑动条slider

本文详细介绍了如何在LVGL中创建、定制滑动条控件,包括设置大小、颜色,添加实时显示的标签以及响应事件。还展示了如何使用内置样式和字体进行美化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LVGL_基础控件滑动条slider

1、创建滑动条控件
在这里插入图片描述

// 创建一个 slider 组件(对象),他的父对象是活动屏幕对象
lv_obj_t *slider = lv_slider_create(lv_scr_act());
LV_LOG_USER("lv_slider_get_value(slider) %d", lv_slider_get_value(slider));

/* 设置位置 */
lv_obj_center(slider); 								   // 方法1:让对象居中,简洁
//lv_obj_align(slider, LV_ALIGN_CENTER, 0, 0); 		   // 方法2:让对象居中,较为灵活

2、设置控件大小


/* 设置大小 */
// 可以不设置,使用默认大小
//lv_obj_set_size(slider, 200, 50);

// 当设置进度条的宽度小于其高度,就可以创建出垂直摆放的进度条。
//lv_obj_set_size(slider, 50, 200);

3、修改旋钮的颜色

lv_obj_set_style_bg_opa(slider, LV_OPA_100, 0);
lv_obj_set_style_bg_color(slider, lv_color_hex(0xbdddba), LV_PART_KNOB | LV_STATE_PRESSED);
lv_obj_set_style_bg_color(slider, lv_color_hex(0x1e1e1e), LV_PART_KNOB | LV_STATE_DEFAULT);

4、添加事件

/* 创建一个label 实时展示滑动条当前的数值 */
lv_obj_t * label = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(label, "%d%%", lv_slider_get_value(slider));
lv_obj_align_to(label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);

// 设置事件处理回调函数,接收所有的事件类型
lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_ALL, label);

static void slider_event_cb(lv_event_t * e)
{
    lv_obj_t * obj = lv_event_get_target(e);        // 获取触发事件的部件(对象)
	lv_obj_t * label = lv_event_get_user_data(e);	// 获取事件传递的用户数据(user_data)
    lv_event_code_t code = lv_event_get_code(e);    // 获取当前部件(对象)触发的事件代码

    switch(code){
        case LV_EVENT_CLICKED:
            LV_LOG_USER("LV_EVENT_CLICKED\n");
			if (lv_slider_get_value(obj) == lv_slider_get_max_value(obj))
				lv_slider_set_value(obj, 0, LV_ANIM_ON);
			else
				lv_slider_set_value(obj, 30, LV_ANIM_ON);
			lv_label_set_text_fmt(label, "%d%%", lv_slider_get_value(obj));
            break;
		case LV_EVENT_PRESSING:
            LV_LOG_USER("LV_EVENT_PRESSING\n");
			lv_slider_set_value(obj, lv_slider_get_value(obj)+1, LV_ANIM_ON);
			lv_label_set_text_fmt(label, "%d%%", lv_slider_get_value(obj));
            break;
		/* ...... */
		/*请尝试添加更多的case吧*/
		case LV_EVENT_VALUE_CHANGED:
			//lv_label_set_text_fmt(label, "%d%%", lv_slider_get_value(obj));
			LV_LOG_USER("LV_EVENT_VALUE_CHANGED\n");
			break;
        default:
            //LV_LOG_USER("OTHERS\n");
            break;
    }
}

5、实战项目
在这里插入图片描述

static void slider_style_init(void)
{
	/* 初始化样式 */
	lv_style_init(&style_part_main);
	lv_style_init(&style_part_knob);
	lv_style_init(&style_part_indicator);

	/* 设置 PART MAIN 样式 */
	lv_style_set_radius(&style_part_main, 15);			// 设置四个角的圆角
	lv_style_set_bg_color(&style_part_main,
						  lv_color_hex(0xc43e1c));		// 设置背景颜色
	//lv_style_set_pad_top(&style_part_main, -2); 		// 设置顶部(top)的填充(top)大小
	//lv_style_set_pad_bottom(&style_part_main, -2);		// 设置底部部(bottom)的填充(top)大小
	//lv_style_set_bg_opa(&style_part_main, LV_OPA_100);	// 设置背景透明度

	/* 设置 PART KNOB 样式 */
	// 将 knob 部分整个设置为透明,就能达到去除旋钮的效果
	// set_opa是设置不透明度,设置不透明度为0就是完全透明
	lv_style_set_opa(&style_part_knob, LV_OPA_0);

	/* 设置 PART INDICATOR 样式 */
	lv_style_set_radius(&style_part_indicator, 0);		// 设置四个角的圆角
	lv_style_set_bg_color(&style_part_indicator,
						  lv_color_hex(0xffffff));		// 设置背景颜色

}
static void test1_slider(void)
{
	// 创建一个 slider 组件(对象),他的父对象是活动屏幕对象
	lv_obj_t *slider = lv_slider_create(lv_scr_act());

	/* 设置位置 */
	lv_obj_center(slider); 								// 方法1:让对象居中,简洁
	//lv_obj_align(slider, LV_ALIGN_CENTER, 0, 0); 		// 方法2:让对象居中,较为灵活

	/*调整大小,让 slider 垂直摆放  */
	lv_obj_set_size(slider, 60, 150);


	/* 将样式应用到 slider */
	// 将保存在 style_part_main 中的样式应用到
	// slider 的 LV_PART_MAIN 上
	lv_obj_add_style(slider, &style_part_main, LV_PART_MAIN);

	// 将保存在 style_part_knob 中的样式应用到
	// slider 的 LV_PART_KNOB 上
	lv_obj_add_style(slider, &style_part_knob, LV_PART_KNOB);

	// 将保存在 style_part_indicator 中的样式应用到
	// slider 的 LV_PART_INDICATOR 上
	lv_obj_add_style(slider, &style_part_indicator, LV_PART_INDICATOR);


	/* 在 slider 内部放一个小图标,用来表明slider的作用 */
	// 这里使用 lvgl 的内置符号(方便、节省内存),可以使用img展示。
	// lvgl内置符号: http://lvgl.100ask.net/8.2/overview/font.html#special-fonts
	lv_obj_t *label = lv_label_create(slider);
	lv_label_set_text(label, LV_SYMBOL_VOLUME_MAX);

	// 在lvgl中内置符号可以像 text 那样使用,lvgl 内置了很多不一样的字体(ASCII),
	// 使用不同尺寸的内置字体就能展示不一样大小的 text ,默认是:lv_font_montserrat_14
	// 需要设置内置字体,请查看: lv_conf.h 中的 LV_FONT_MONTSERRAT_...
	lv_obj_set_style_text_font(label, &lv_font_montserrat_20, 0);
	lv_obj_set_style_text_color(label, lv_color_hex(0xac8477), 0);
	lv_obj_align(label, LV_ALIGN_BOTTOM_MID, 0, -20);

}

3、其他方面参照控件bar

### lvgl 滑动条使用教程 滑动条(`lv_slider`)是一个常见的UI组件,在图形界面设计中用于让用户通过拖拽旋钮来调整数值。在LVGL库中,滑动条不仅支持水平方向也支持垂直方向的操作[^1]。 #### 创建滑动条实例 创建一个基本的滑动条可以通过调用 `lv_slider_create()` 函数完成: ```c // 创建父容器 (假设已经初始化好屏幕) lv_obj_t * parent = lv_scr_act(); // 在指定父级上创建一个新的滑动条对象 lv_obj_t * slider = lv_slider_create(parent); ``` #### 设置滑动条属性 为了使滑动条更符合特定需求,可以对其进行一系列配置操作,比如改变其外观样式、设定取值范围以及响应事件等。 ##### 设定最小最大值 默认情况下,滑动条的取值区间是从0到100之间变化。如果希望自定义这个范围,则可利用如下函数: ```c lv_slider_set_range(slider, MIN_VALUE, MAX_VALUE); // 将MIN_VALUE替换为你想要设置的最小值,MAX_VALUE为最大值 ``` ##### 修改初始位置/当前值 要更改滑动条指针所指向的位置即当前选中的值,应该这样写代码: ```c lv_slider_set_value(slider, VALUE_TO_SET, LV_ANIM_ON /* 或者 LV_ANIM_OFF */ ); ``` 这里第二个参数是要设成的具体数值;第三个参数决定是否启用动画效果过渡至新状态。 ##### 添加回调处理逻辑 当用户交互引起滑块移动时触发相应的动作,可通过绑定事件监听器实现这一功能: ```c static void event_handler(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); if(code == LV_EVENT_VALUE_CHANGED){ printf("Slider value: %d\n", lv_slider_get_value(lv_event_get_target(e))); } } lv_obj_add_event_cb(slider, event_handler, LV_EVENT_ALL, NULL); ``` 上述片段展示了如何捕捉并打印出每次变动后的最新读数。 #### 定制化显示风格 对于追求更高层次视觉体验的应用场景而言,还可以深入定制滑轨的颜色、宽度乃至整个控件的整体布局等方面的内容。这部分内容涉及到较为复杂的CSS类比概念——主题和样式表机制[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HX科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值