1. 介绍
lv_slider 滑块是由 lv_bar 进度条对象外加一个类似于旋钮的东西构成的,这个旋钮可以被拖拽来设置 lv_slider 滑块的值,和 lv_bar 进度条一样,lv_slider 也可以被设置成是水平滑块或者是垂直滑块,不仅如此,lv_bar 对象上的大部分特性在 lv_slider 对象上基本都能找到,比如设置进度值,动画时间,设置最小最大范围等等,API 接口的用法基本是一模一样的.最后来说一下它的事件,当滑块被点击或者滑块上面的旋钮被拖拽导致其进度值发生变化时,它就会给它的事件回调函数发送一个 LV_EVENT_VALUE_CHANGED 事件,如果旋钮是在被持续拖拽的话,那么 LV_EVENT_VALUE_CHANGED 事件也将会被持续发送,有时候我们可能不希望持续接受到此事件,那我们只需忽略就行,只监听它的 LV_EVENT_RELEASED 松手事件来获取最后的进度值。
2. lv_slider 的 API 接口
2.1 主要数据类型
2.1.1 滑块样式数据类型
enum {
LV_SLIDER_STYLE_BG,
LV_SLIDER_STYLE_INDIC,
LV_SLIDER_STYLE_KNOB,
};
typedef uint8_t lv_slider_style_t;
LV_SLIDER_STYLE_BG: 滑块的背景样式,其实就是其内部的 lv_bar 进度条的背景样式,使用样式中的 style.body 字段,其中的 padding 字段用来设置背景边框与旋钮边框之间的距离;
LV_SLIDER_STYLE_INDIC: 滑块的指示器样式,其实就是其内部的 lv_bar 进度条的指示器样式,使用样式中的 style.body 字段,其中的 padding 字段设置指示器与背景边框之间的距离;
LV_SLIDER_STYLE_KNOB: 滑块上旋钮的样式,使用样式中的 style.body 字段,但是其内部的 padding 字段除外。
2.2 API 接口
2.2.1 创建对象
lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy);
参数:
par: 父对象
copy: 拷贝的对象,如果无拷贝的话,传 NULL 值
返回值:
返回创建出来的对象,如果返回 NULL 的话,说明堆空间不够了
2.2.2 设置动画时长
static inline void lv_slider_set_anim_time(lv_obj_t * slider, uint16_t anim_time);
参数:
slider: 滑块对象
anim_time: 动画时长,单位 ms
注意此 API 接口必须得放在 lv_slider_set_value 接口前面调用,否则无效
2.2.3 设置进度值
static inline void lv_slider_set_value(lv_obj_t * slider, int16_t value, lv_anim_enable_t anim);
参数:
slider: 滑块对象
value: 新的进度值
anim: 在切换到新的进度值时,是否使能动画效果,有 2 个可选值如下:
LV_ANIM_OFF: 不使能动画效果
LV_ANIM_ON: 使能动画效果
2.2.4 设置进度范围
static inline void lv_slider_set_range(lv_obj_t * slider, int16_t min, int16_t max);
参数:
slider: 滑块对象
min: 最小值
max: 最大值
2.2.5 设置样式
void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_style_t * style);
参数:
slider: 滑块对象
type: 设置哪一个部件的样式,有如下 3 个可选值:
LV_SLIDER_STYLE_BG: 设置背景的样式
LV_SLIDER_STYLE_INDIC: 设置指示器的样式
LV_SLIDER_STYLE_KNOB: 设置旋钮的按钮
style: 样式
2.2.6 获取当前的进度值
int16_t lv_slider_get_value(const lv_obj_t * slider);
参数:
slider: 滑块对象
返回值:
返回当前的进度值
2.2.7 判断旋钮是否正在被拖拽
bool lv_slider_is_dragged(const lv_obj_t * slider);
参数:
slider: 滑块对象
返回值:
返回 true 代表正在被拖拽,返回 false 代表没有在被拖拽。