OpenEdv-开源电子网

 找回密码
 立即注册
查看: 2064|回复: 1

求问,lvgl 8的mask(蒙版)是怎么使用的,现在改一个折线图改不出来了

[复制链接]

17

主题

149

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
470
金钱
470
注册时间
2020-4-22
在线时间
234 小时
发表于 2022-7-15 11:50:58 | 显示全部楼层 |阅读模式
120金钱
由于ui给的折线图是变化率是不同,lvgl好像添加系列之后只支持一种变化率,那么就坐标对不上了,想手动计算坐标,给画图事件调用,改完坐标发现渐变蒙版不匹配了
lv_point_t my_p[20] = {
    {40,50},
    {60,70},
    {80,90},
    {100,110},
    {120,130},
    {140,120},
    {160,100},
    {180,80},
    {160,100},
    {140,80},
};

static void draw_event_cb(lv_event_t * e)
{
    lv_obj_t * obj = lv_event_get_target(e);
    lv_event_code_t code = lv_event_get_code(e);
    /*Add the faded area before the lines are drawn*/
    lv_obj_draw_part_dsc_t * dsc = lv_event_get_draw_part_dsc(e);


    if(dsc->part == LV_PART_ITEMS) {
        if(!dsc->p1 || !dsc->p2) return;
        if(dsc->id < 10)
        {
            dsc->p1 = &my_p[dsc->id];
            dsc->p2 = &my_p[dsc->id +1];
            LV_LOG_USER("%d\n", dsc->id);
            LV_LOG_USER("P1:%d\n", dsc->p1->y);
            LV_LOG_USER("P2:%d\n", dsc->p2->y);
        /*
        lv_draw_mask_line_param_t line_mask_param;
        lv_draw_mask_line_points_init(&line_mask_param, dsc->p1->x, dsc->p1->y, dsc->p2->x, dsc->p2->y, LV_DRAW_MASK_LINE_SIDE_BOTTOM);
        int16_t line_mask_id = lv_draw_mask_add(&line_mask_param, NULL);

        /*Add a fade effect: transparent bottom covering top*/
        lv_coord_t h = lv_obj_get_height(obj);
        lv_draw_mask_fade_param_t fade_mask_param;
        lv_draw_mask_fade_init(&fade_mask_param, &obj->coords, LV_OPA_COVER, obj->coords.y1 + h / 8, LV_OPA_TRANSP,obj->coords.y2);
        int16_t fade_mask_id = lv_draw_mask_add(&fade_mask_param, NULL);

        /*Draw a rectangle that will be affected by the mask*/
        lv_draw_rect_dsc_t draw_rect_dsc;
        lv_draw_rect_dsc_init(&draw_rect_dsc);
        draw_rect_dsc.bg_opa = LV_OPA_100;
        draw_rect_dsc.bg_color = dsc->line_dsc->color;

        lv_area_t a;
        a.x1 = dsc->p1->x;
        a.x2 = dsc->p2->x - 1;
        a.y1 = LV_MIN(dsc->p1->y, dsc->p2->y);
        a.y2 = obj->coords.y2;
        lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);

        /*Remove the masks*/
        //lv_draw_mask_free_param(&line_mask_param);
        lv_draw_mask_free_param(&fade_mask_param);
        //lv_draw_mask_remove_id(line_mask_id);
        lv_draw_mask_remove_id(fade_mask_id);
        }
    }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

149

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
470
金钱
470
注册时间
2020-4-22
在线时间
234 小时
 楼主| 发表于 2022-7-15 17:31:50 | 显示全部楼层
我想到了,先把要写的数值进行对应,lv_chart_set_ext_y_array的数组直接修改掉。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表