说明
基于LVGL8.2版本
项目中遇到更改slider步长的需求,官方文档中未说明,实现如下。
代码示例
如下代码基于官方示例修改:
// An highlighted block
static void slider_event_cb(lv_event_t * e);
static lv_obj_t * slider_label;
/**
* A default slider with a label displaying the current value
*/
void test_start(void)
{
/*Create a slider in the center of the display*/
lv_obj_t * slider = lv_slider_create(lv_scr_act());
lv_obj_center(slider);
lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
/*Create a label below the slider*/
slider_label = lv_label_create(lv_scr_act());
lv_label_set_text(slider_label, "0%");
lv_obj_align_to(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
}
static void slider_event_cb(lv_event_t * e)
{
lv_obj_t * slider = lv_event_get_target(e);
//-----------修改步长操作-----------
uint_t cur_data = (uint_t )lv_slider_get_value(slider);
uint8_t cur_data_sub = cur_data % 10;
if(cur_data_sub >= 5)//四舍五入
{
cur_data = cur_data - cur_data_sub + 10;//修改步长为10
}
else
{
cur_data = cur_data - cur_data_sub;
}
//------------------------------------
char buf[8];
lv_snprintf(buf, sizeof(buf), "%d%%", cur_data);
lv_label_set_text(slider_label, buf);
lv_slider_set_value(slider, cur_data, LV_ANIM_OFF);//设置无动画效果
lv_obj_align_to(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
}
文档链接:
http://lvgl.100ask.net/8.2/widgets/core/slider.html