嵌入式LVGL

嵌入式LVGL_slider自定义步长

说明

基于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值