用户工具

站点工具


icore4tlvgl_12
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-12-2 yang 初次建立

实验十二:lv_slider滑块

一、滑块

滑块对象看起来像一个带有圆形按钮的条形指示器(Bar),也可以用于描述一个事件、容量等的进度状态,或用于显示一些检测的值,如压力,温度,完成任务,速度等。不过相较于Bar,滑块可以主动点击或滑动以设置一个值。

滑块的主要部分被称为 LV_SLIDER_PART_BG ,它使用典型的背景样式属性。

LV_SLIDER_PART_INDIC 是一个虚拟部件,使用了所有典型的背景属性。默认情况下,指标的最大大小与背景的大小相同,但是在其中设置正的填充值 LV_SLIDER_PART_BG 将使指标变小(负值会使它变大)。

LV_SLIDER_PART_KNOB 是一个虚拟部件,使用所有典型的背景属性来描述旋钮。滑块值标签也与旋钮当前位置和尺寸大小对齐。默认情况下,旋钮是正方形(带有半径),其边长等于滑块的较小边。可以使用填充值使旋钮变大,填充值可以是不对称的。

static void slider_event_cb(lv_obj_t * slider, lv_event_t event)/* 滑块回调函数 */
{
	if(event == LV_EVENT_VALUE_CHANGED) {
		static char buf[16];                       /* 获取滑块新值 */
		lv_snprintf(buf, sizeof(buf), "%d", lv_slider_get_value(slider));
		lv_obj_set_style_local_value_str(slider, LV_SLIDER_PART_KNOB, LV_STATE_DEFAULT, buf);                              /* 更新滑块标签 */
	}
}
void lv_gui_run(void)
{
	lvgl2rtt_init("lcd");                                      /* 初始化lvgl2rtt */
 
	lv_obj_t * slider = lv_slider_create(lv_scr_act(), NULL); /* 创建滑块 */
	lv_slider_set_value(slider, 0, LV_ANIM_OFF);              /* 设置初始值 */
	lv_obj_set_event_cb(slider, slider_event_cb);             /* 绑定回调函数 */
	lv_slider_set_range(slider, 0, 100);                      /* 设置值范围 */
	lv_obj_set_size(slider, 200, 10);                         /* 设置滑块尺寸 */
	lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0);        /* 设置滑块位置 */
}

与条形指示器一样,在对象尺寸的宽小于长时,滑块也可以是垂直的。

lv_obj_set_size(slider, 10, 200);                              /* 设置滑块尺寸 */

二、值和范围

要设置初始值,请使用lv_slider_set_value(slider, new_value, LV_ANIM_ON/OFF)。 用lv_slider_set_anim_time(slider, anim_time) 来设置动画时间(以毫秒为单位)。 要指定滑块值的范围(最小值,最大值),可以使用 lv_slider_set_range(slider, min , max)

三、对称

除了正常类型外,滑块还可以配置为两种其他类型:

  • LV_SLIDER_TYPE_NORMAL 普通型。
  • LV_SLIDER_TYPE_SYMMETRICAL 将指标对称地绘制为零(从零开始,从左到右)。
  • LV_SLIDER_TYPE_RANGE 允许为左(起始)值使用附加旋钮,设置滑块左值使用函数lv_slider_set/get_left_value()

滑块类型设置可以用 lv_slider_set_type(slider, LV_SLIDER_TYPE_…) 函数。

static void slider_event_cb(lv_obj_t * slider, lv_event_t event) /* 滑块回调函数 */
{
	if(event == LV_EVENT_VALUE_CHANGED) {                /* 检查滑块模式 */
        if(lv_slider_get_type(slider) == LV_SLIDER_TYPE_NORMAL) {
            static char buf[16];                              /* 获取滑块新值 */
            lv_snprintf(buf, sizeof(buf), "%d", lv_slider_get_value(slider));
            lv_obj_set_style_local_value_str(slider, LV_SLIDER_PART_KNOB, LV_STATE_DEFAULT, buf);                                      /* 更新滑块标签 */
        } else {
            static char buf[32];
            lv_snprintf(buf, sizeof(buf), "%d-%d", lv_slider_get_left_value(slider), lv_slider_get_value(slider));
            lv_obj_set_style_local_value_str(slider, LV_SLIDER_PART_INDIC, LV_STATE_DEFAULT, buf);
        }
}
}
void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                     /* 初始化lvgl2rtt */
 
	lv_obj_t * slider = lv_slider_create(lv_scr_act(), NULL); /* 创建滑块 */
	lv_slider_set_value(slider, 30, LV_ANIM_OFF);             /* 设置初始值 */
	lv_obj_set_event_cb(slider, slider_event_cb);             /* 绑定回调函数 */
	lv_slider_set_range(slider, 0, 100);                     /* 设置值范围 */
	lv_obj_set_size(slider, 200, 10);                        /* 设置滑块尺寸 */
	lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0);       /* 设置滑块位置 */
	lv_slider_set_type(slider, LV_SLIDER_TYPE_RANGE);        /* 设置双点模式 */
	lv_slider_set_left_value(slider, 10, LV_ANIM_OFF);       /* 设置左值位置 */
}

四、仅拖拽模式

通常,可以通过拖动旋钮单击滑块来调整滑块值。在后一种情况下,旋钮移动到所单击的点,并且滑块值相应地变化。在某些情况下,用户担心误触而改变滑块值,因此希望将滑块设置为仅在拖动旋钮时做出反应。这时通过调用 lv_obj_set_adv_hittest(slider, true) 来启用此功能。

五、事件

除了通用事件之外,滑块还会发送以下特殊事件:

  • LV_EVENT_VALUE_CHANGED 滑块被拖动或滑块值改变时发送。拖动滑块(仅在释放滑块时)会连续发送事件。使用 lv_slider_is_dragged 以检查滑块是否被拖动或刚刚释放。
icore4tlvgl_12.txt · 最后更改: 2022/04/01 11:13 由 sean