slider的相关API - lightdong/LVGL_Study GitHub Wiki

SLIDER_TEST/测试滑块的相关内容/ /part : main indicator knob/ /创建滑块/

lv_obj_t *slider1 = lv_slider_create(lv_scr_act());
lv_obj_set_size(slider1,200,20);
//lv_obj_set_size(slider1,20,200);//设置滑块为纵的只需要,设置x < y

/创建一个标签用于显示数值/

lv_obj_t *label1 = lv_label_create(lv_scr_act());
lv_obj_align_to(label1,slider1,LV_ALIGN_OUT_TOP_MID,0,-10);
lv_label_set_text(label1,"waiting");

/修改滑块的样式/

lv_obj_set_style_bg_color(slider1,lv_color_hex(0x684AE3),LV_STATE_DEFAULT|LV_PART_MAIN);
lv_obj_set_style_bg_opa(slider1,LV_OPA_60,LV_STATE_DEFAULT|LV_PART_MAIN);
lv_obj_set_style_bg_color(slider1,lv_color_hex(0xFC4A98),LV_STATE_DEFAULT|LV_PART_INDICATOR);
lv_obj_set_style_bg_color(slider1,lv_color_hex(0x59F73E),LV_STATE_PRESSED|LV_PART_KNOB);
lv_obj_set_style_pad_top(slider1,4,LV_STATE_PRESSED|LV_PART_MAIN);
lv_obj_set_style_pad_bottom(slider1,4,LV_STATE_PRESSED|LV_PART_MAIN);
lv_obj_set_style_pad_top(slider1,20,LV_STATE_PRESSED|LV_PART_KNOB);
lv_obj_set_style_pad_bottom(slider1,20,LV_STATE_PRESSED|LV_PART_KNOB);
/*指定滑块的范围*/
lv_slider_set_range(slider1,0,100);
lv_slider_set_range(slider1,-60,100);//也可以存在负数
/*设置滑块的初始值*/
//lv_slider_set_value(slider1,60,LV_ANIM_OFF);//先不加入动画
/*打印出当前值*/
//printf("val : %d\n",lv_slider_get_value(slider1));
/*添加回调函数,在回调中进行打印*/
lv_obj_add_event_cb(slider1,slider_cb,LV_EVENT_VALUE_CHANGED,label1);

/设置滑块的模式/ //nomal,这一个是默认状态 //symmetrical //range

//lv_slider_set_mode(slider1,LV_SLIDER_MODE_NORMAL);//以最左侧为原点
//lv_slider_set_mode(slider1,LV_SLIDER_MODE_SYMMETRICAL);//始终以0为原点
lv_slider_set_mode(slider1,LV_SLIDER_MODE_RANGE);
/*在最后一种模式下也可以设置与读取最左侧的值*/
lv_slider_set_left_value(slider1,-30,LV_ANIM_OFF);

/*去除掉点击就可以定位到滑块的位置,而是改为只能通过点击*/
lv_obj_add_flag(slider1,LV_OBJ_FLAG_ADV_HITTEST);

/*扩展按钮区域,这样可以不用碰到按钮,就可以滑动滑块了*/
lv_obj_set_ext_click_area(slider1,20);

/回调函数/

static void slider_cb(lv_event_t *e){
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *target = lv_event_get_target(e);
    lv_obj_t *usr_data = (lv_obj_t *)lv_event_get_user_data(e);
    if(usr_data == NULL)
        return;
    if(code != LV_EVENT_VALUE_CHANGED)
        return;
    /*读取滑块range模式下的两侧的value*/
    printf("%d - %d\n",lv_slider_get_left_value(target),lv_slider_get_value(target));
    lv_label_set_text_fmt(usr_data,"%d - %d",lv_slider_get_left_value(target),lv_slider_get_value(target));
}