LVGL lv_slider滑块(16)

lv_slider

lv_slider是由lv_bar进度条和外加旋钮的东西构成,当滑块被点击或拖拽导致进度值变化时会产生LV_EVENT_VALUE_CHANGED事件,若被持续的拖拽,那么LV_EVENT_VALUE_CHANGED也会持续产生,如果希望只获得最后进度值,则监听LV_EVENT_RELEASED事件来获得,相关API在lv_slider.h

样式

/** Built-in styles of slider*/
enum {
    LV_SLIDER_PART_BG, /** Slider background style. */
    LV_SLIDER_PART_INDIC, /** Slider indicator (filled area) style. */
    LV_SLIDER_PART_KNOB, /** Slider knob style. */
};

例子

static void slider_event_cb(lv_obj_t * slider, lv_event_t event);
static lv_obj_t * slider;
static lv_obj_t * slider_label;

static lv_obj_t * slider2;
static lv_obj_t * slider2_label;
void lv_ex_slider_2(void)
{
	static lv_style_t slider_bg_style;//背景的样式
	static lv_style_t slider_indic_style;//指示器的样式
	static lv_style_t slider_knob_style;//旋钮的样式

	lv_style_init(&slider_bg_style);
	lv_style_set_outline_color(&slider_bg_style, LV_STATE_DEFAULT, LV_COLOR_RED);

	lv_style_init(&slider_indic_style);
	lv_style_set_bg_color(&slider_indic_style, LV_STATE_DEFAULT, LV_COLOR_RED);
	
	lv_style_init(&slider_knob_style);
	lv_style_set_bg_color(&slider_knob_style, LV_STATE_DEFAULT, LV_COLOR_RED);

    /* Create a slider in the center of the display */
    slider = lv_slider_create(lv_scr_act(), NULL);
	lv_obj_add_style(slider, LV_SLIDER_PART_BG, &slider_bg_style);
	lv_obj_add_style(slider, LV_SLIDER_PART_INDIC, &slider_indic_style);
	lv_obj_add_style(slider, LV_SLIDER_PART_KNOB, &slider_knob_style);

    lv_obj_set_width(slider, LV_DPI *2);//宽度
	lv_obj_set_height(slider, 8);//高度

    lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_event_cb(slider, slider_event_cb);
    lv_slider_set_range(slider, 0, 100);//范围

    /* Create a label below the slider */
    slider_label = lv_label_create(lv_scr_act(), NULL);
    lv_label_set_text(slider_label, "0");
    lv_obj_set_auto_realign(slider_label, true);//文本自动对齐
    lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
    
    /* Create an informative label */
    lv_obj_t * info = lv_label_create(lv_scr_act(), NULL);
    lv_label_set_text(info, "Welcome to the slider+label demo!\n"
                            "Move the slider and see that the label\n"
                            "updates to match it.");
    lv_obj_align(info, NULL, LV_ALIGN_IN_TOP_LEFT, 10, 10);

	//slider2//
	slider2 = lv_slider_create(lv_scr_act(), slider);
	lv_slider_set_type(slider2, LV_SLIDER_TYPE_RANGE);
	lv_obj_align(slider2, slider, LV_ALIGN_CENTER, 0, 50);
	lv_slider_set_value(slider2, 100, LV_ANIM_OFF);
	lv_slider_set_left_value(slider2, 0, LV_ANIM_OFF);

	slider2_label = lv_label_create(lv_scr_act(), slider_label);
	lv_label_set_text(slider2_label, "0-100");
	lv_obj_set_auto_realign(slider2_label, true);//文本自动对齐
	lv_obj_align(slider2_label, slider2, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);

}
static void slider_event_cb(lv_obj_t * obj, lv_event_t event)
{
	if (obj == slider)
	{
		if (event == LV_EVENT_VALUE_CHANGED) {
			static char buf[4]; /* max 3 bytes for number plus 1 null terminating byte */
			printf("slider temp value :%d\n", lv_slider_get_value(obj));
			snprintf(buf, 4, "%u", lv_slider_get_value(obj));
			lv_label_set_text(slider_label, buf);
		}
		if (event == LV_EVENT_RELEASED)
		{
			printf("slider last value :%d\n", lv_slider_get_value(obj));
		}
	}
	if (obj == slider2)
	{
		if (event == LV_EVENT_VALUE_CHANGED) {
			static char buf2[8]; /* max 3 bytes for number plus 1 null terminating byte */
			printf("slider2 temp value :%d-%d\n", lv_slider_get_left_value(obj),lv_slider_get_value(obj));
			snprintf(buf2, 8, "%u-%u", lv_slider_get_left_value(obj), lv_slider_get_value(obj));
			lv_label_set_text(slider2_label, buf2);
		}
		if (event == LV_EVENT_RELEASED)
		{
			printf("slider2 last value :%d-%d\n", lv_slider_get_left_value(obj), lv_slider_get_value(obj));
		}
	}
}

在这里插入图片描述

LVGL(LittlevGL)是一个轻量级的图形用户界面库,主要用于嵌入式系统,特别是Linux驱动的硬件平台。要在LVGL中旋转滑块组件(`lv_slider`),你首先需要了解滑块的基本属性和手势操作。滑动通常通过设置滑块的`orientation`属性来控制其方向,然后监听用户的触摸事件来调整滑块的位置。 以下是一个简单的步骤示例: 1. 导入必要的头文件: ```c #include "lvgl.h" #include "lv_style.h" #include "lv_obj.h" #include "lv_slider.h" ``` 2. 创建滑块并设置初始样式: ```c lv_obj_t *slider = lv_slider_create(lv_scr_act(), NULL); if (!slider) return; // 错误处理 // 设置滑块默认样式 lv_style_t style_slider; lv_style_copy(&style_slider, &lv_theme_get_style("slider", LV_THEME_SUBMENUBAR)); style_slider.body.radius = LV_RADIUS_CIRCLE_SMALL; // 添加圆角 lv_slider_set_style(slider, LV.slider.style_reactive, &style_slider); // 设置交互状态风格 lv_slider_set_style(slider, LV.slider.style_base, &style_slider); // 设置默认状态风格 ``` 3. 设置滑块的旋转方向: ```c lv_slider_set_orientation(slider, LV_ORIENTATION_VERTICAL); // 或者 LV_ORIENTATION_HORIZONTAL,这将决定滑块的水平或垂直旋转 ``` 4. 监听滑动事件(这里仅做示例,完整实现需根据你的需求定制): ```c void slider_event_handler(lv_obj_t *obj, lv_event_t event) { switch (event) { case LV_EVENT_VALUE_CHANGED: // 处理滑动值改变的逻辑 break; default: break; } } lv_event_cb_t slider_value_changed_cb = lv_event_cb_create(slider_event_handler, NULL); lv_obj_connect_signal(slider, LV_EVENT_VALUE_CHANGED, slider_value_changed_cb); ``` 5. 开始监听触摸: ```c lv_indev_get_type(lv_indev_getpointer()) == LV_INDEV_TYPE.POINTER ? lv_event_register_with_dev(lv_indev_getpointer(), slider) : lv_indev_register(slider, NULL); // 注册滑块为触摸事件接收器 ``` 这样,你就创建了一个可以旋转的滑块。注意,LVGL本身并不直接提供旋转滑块的效果,上述代码是基于LVGL的基本组件和事件机制,你可以进一步自定义滑动位置更新和视觉效果,例如通过动画来实现平滑的旋转效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值