目录
- 一、概述
- 二、滑块
- 1、设置滑块当前值和范围值
- 2、设置滑块部件的模式
- 3、禁用单击
- 4、事件
- 5、API 函数
 
一、概述
滑动条对象看起来像是在 进度条 增加了一个可以调节的旋钮,使用时可以通过拖动旋钮来设置一个值。 就像进度条(bar)一样,Slider 可以是垂直的或水平的(当设置进度条的宽度小于其高度,就可以创建出垂直摆放的滑动条)。
滑块部件由三个部分组成:主体背景、指示器和旋钮,示意图如下:

- LV_PART_MAIN滑动条的背景。 使用所有典型的背景样式属性。 设置 padding 样式会使指标在相应方向上变小。
- LV_PART_INDICATOR显示滑动条当前状态的指示器。 也是使用所有典型的背景样式属性。
- LV_PART_KNOB旋钮(可以是原形或矩形)。 也是使用所有典型的背景属性。 默认情况下,旋钮是方形的(带有可选的圆角半径),边长等于滑动条的较小边。 可以通过设置 padding 样式调整旋钮的大小。 填充值也可以是不对称的。
二、滑块
1、设置滑块当前值和范围值
默认情况下,滑块部件被创建出来后,它的当前值是 0,范围值是 0~100。
- 如果用户需要设置当前值,可调用 lv_slider_set_value函数。
- 如果用户需要设置范围值,可以调用 lv_slider_set_range函数。
在水平模式下默认绘制方向为从左到右,并且垂直模式下从下到上。如果最小值大于最大值,如
100~0时,绘制方向变为相反的方向。

lv_obj_t* slider = lv_slider_create(lv_scr_act());
lv_slider_set_range(slider,0,255);            /* 设置slider 部件范围值 */
lv_slider_set_value(slider,100, LV_ANIM_ON);  /* 设置slider 部件当前值 */
lv_obj_center(slider);
2、设置滑块部件的模式
除了默认的模式之外,滑块部件还可以配置为以下两种拓展模式:
- LV_SLIDER_MODE_SYMMETRICAL:无论当前值是正数还是负数,指示器始终从零绘制到当前值。
- LV_SLIDER_MODE_RANGE:允许调用lv_bar_set_start_value 函数设置起始值,该起始值必须小于结束值。
用户需要设置滑块部件的模式,可调用以下函数:
lv_slider_set_mode(slider, LV_SLIDER_MODE_…);

lv_obj_t* slider = lv_slider_create(lv_scr_act());
lv_slider_set_mode(slider, LV_SLIDER_MODE_SYMMETRICAL);  /* 设置slider 部件模式:始终从0 开始绘制指示器 */
lv_slider_set_range(slider,-100,100);                    /* 设置slider 部件数值范围 */
lv_obj_center(slider);
lv_obj_t* slider1 = lv_slider_create(lv_scr_act());
lv_slider_set_mode(slider1, LV_SLIDER_MODE_RANGE);  /* 创建slider1 部件模式:允许指定起始值 */
lv_bar_set_start_value(slider1,0,LV_ANIM_OFF);      /* 创建slider1 部件起始值 */
lv_slider_set_range(slider1, -100, 100);            /* 创建slider1 部件数值范围 */
lv_obj_align_to(slider1, slider,LV_ALIGN_OUT_BOTTOM_MID,0,30);
由上图可知:
- 在 LV_SLIDER_MODE_SYMMETRICAL模式下,滑块始终是从 0 点开始绘制指示器;
- 而在 LV_SLIDER_MODE_RANGE模式下,滑块部件可以改变起始值,值得注意的是,起始值必须小于结束值(当前值)。
3、禁用单击
默认情况下,用户可以通过拖动旋钮或者单击滑块的方式来调整指示器位置,而后者可能会导致当前值的突变,这在某些情景下是不允许出现的。如果用户想禁用单击调整当前值,可调用以下函数:
lv_obj_add_flag(slider, LV_OBJ_FLAG_ADV_HITTEST);
4、事件
- LV_EVENT_VALUE_CHANGED在拖动滑块或用键更改。当滑块处于被拖拽。
- LV_EVENT_RELEASED在刚刚释放滑块时发送。

void slider_event_cb(lv_event_t *e)
{
    printf("释放按钮\r\n");
}
void my_gui(void) {
    lv_obj_t* slider = lv_slider_create(lv_scr_act());
    lv_slider_set_range(slider,1,255);            /* 设置slider 部件范围值 */
    lv_slider_set_value(slider,100, LV_ANIM_ON);  /* 设置slider 部件当前值 */
    lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL); 
    lv_obj_center(slider);
}
5、API 函数
| 函数 | 描述 | 
|---|---|
| lv_slider_create() | 创建滑块部件 | 
| lv_slider_set_value() | 设置当前值 | 
| lv_slider_set_left_value() | 设置左侧旋钮的值 | 
| lv_slider_set_range() | 设置范围值 | 
| lv_slider_set_mode() | 设置模式 | 
| lv_slider_get_value() | 获取当前值 | 
| lv_slider_get_left_value() | 获取左侧旋钮的值 | 
| lv_slider_get_min_value() | 获取最小值 | 
| lv_slider_get_max_value() | 获取最大值 | 
| lv_slider_is_dragged() | 判断滑块是否被拖动 | 
| lv_slider_get_mode() | 获取滑块部件模式 | 



















