lvgl-roller滚轮自用注释

static void mask_event_cb(lv_event_t* e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t* obj = lv_event_get_target(e);

    static int16_t mask_top_id = -1; //上遮罩
    static int16_t mask_bottom_id = -1; //下遮罩

    if (code == LV_EVENT_COVER_CHECK) {
        lv_event_set_cover_res(e, LV_COVER_RES_MASKED);

    }
    else if (code == LV_EVENT_DRAW_MAIN_BEGIN) {
        /* add mask */
        const lv_font_t* font = lv_obj_get_style_text_font(obj, LV_PART_MAIN);
        lv_coord_t line_space = lv_obj_get_style_text_line_space(obj, LV_PART_MAIN);
        lv_coord_t font_h = lv_font_get_line_height(font);

        lv_area_t roller_coords;
        lv_obj_get_coords(obj, &roller_coords);

        lv_area_t rect_area;
        rect_area.x1 = roller_coords.x1;
        rect_area.x2 = roller_coords.x2;
        rect_area.y1 = roller_coords.y1;
        rect_area.y2 = ((roller_coords.y1 + (lv_obj_get_height(obj) - font_h - line_space) / 2) - 4);

        lv_draw_mask_fade_param_t* fade_mask_top = lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));
        lv_draw_mask_fade_init(fade_mask_top, &rect_area, LV_OPA_TRANSP, rect_area.y1, LV_OPA_TRANSP, rect_area.y2);//y1遮罩顶部y轴值,y2遮罩底部y轴值,OPA为透明度渐变
        mask_top_id = lv_draw_mask_add(fade_mask_top, NULL);

        rect_area.y1 = rect_area.y2 + font_h + line_space - 1;
        rect_area.y2 = roller_coords.y2;

        lv_draw_mask_fade_param_t* fade_mask_bottom = lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));
        lv_draw_mask_fade_init(fade_mask_bottom, &rect_area, LV_OPA_COVER, rect_area.y1, LV_OPA_TRANSP, rect_area.y2);//y1遮罩顶部y轴值,y2遮罩底部y轴值,OPA为透明度渐变
        mask_bottom_id = lv_draw_mask_add(fade_mask_bottom, NULL);

    }
    else if (code == LV_EVENT_DRAW_POST_END) {
        lv_draw_mask_fade_param_t* fade_mask_top = lv_draw_mask_remove_id(mask_top_id);
        lv_draw_mask_fade_param_t* fade_mask_bottom = lv_draw_mask_remove_id(mask_bottom_id);
        lv_draw_mask_free_param(fade_mask_top);
        lv_draw_mask_free_param(fade_mask_bottom);
        lv_mem_buf_release(fade_mask_top);
        lv_mem_buf_release(fade_mask_bottom);
        mask_top_id = -1;
        mask_bottom_id = -1;
    }
}

/**
 * Add a fade mask to roller.
 */
void mylv_example_roller_3(void)
{
    static lv_style_t style;
    lv_style_init(&style);//初始化style
    lv_style_set_bg_color(&style, lv_color_black());//style背景色黑
    //lv_style_set_text_color(&style, lv_color_white());//style文字色白
    lv_style_set_border_width(&style, 0);//边框0
    lv_style_set_pad_all(&style, 0);//内边距0
    //lv_obj_add_style(lv_scr_act(), &style, 0);

    lv_obj_t* roller1 = lv_roller_create(parent_obj);//创建roller
    lv_obj_add_style(roller1, &style, 0);//添加style
    lv_obj_set_height(roller1, 200);//手动设置控件高度
    lv_obj_set_style_bg_opa(roller1, LV_OPA_TRANSP, LV_PART_SELECTED);//设置控件选中区域的背景透明度为0
    
    lv_obj_set_style_text_font(roller1, &myriadpro_semibold60, LV_PART_SELECTED);//设置选中区域文字为myriadpro_semibold60
    lv_obj_set_style_text_font(roller1, &myriadpro_regular40, LV_PART_MAIN);//设置其他区域文字为myriadpro_regular40

    lv_roller_set_options(roller1,
        "01\n"
        "02\n"
        "03\n"
        "04",
        LV_ROLLER_MODE_NORMAL);//设置滚轮内容,LV_ROLLER_MODE_NORMAL-普通滚轮,LV_ROLLER_MODE_INFINITE-循环滚轮
    
    lv_obj_center(roller1);//控件居中
    lv_obj_set_pos(roller1, 60, 20);//控件位置偏移
    lv_obj_set_style_text_color(roller1, lv_color_hex(0x5B5B5B), LV_PART_MAIN);//设置其他文字颜色
    lv_obj_set_style_text_color(roller1, lv_color_hex(0xE86B10), LV_PART_SELECTED);//设置选中文字颜色
    lv_obj_set_style_text_line_space(roller1, 25, LV_PART_MAIN);//设置其他文字行间距
    lv_obj_set_style_text_line_space(roller1, 25, LV_PART_SELECTED);//设置选中文字行间距
    //lv_roller_set_visible_row_count(roller1, 3);//设置控件高度刚好显示3个内容
    lv_obj_add_event_cb(roller1, mask_event_cb, LV_EVENT_ALL, NULL);//设置黑色遮罩回调
}

设置某一滚轮值:

lv_roller_set_selected(roller,2,LV_ANIM_OFF);

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值