银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-12-2 | yang | 初次建立 |
滑块对象看起来像一个带有圆形按钮的条形指示器(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_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) 来启用此功能。
除了通用事件之外,滑块还会发送以下特殊事件: