LVGL之未知数量的line创建

LVGL之line

1.前期准备

通过设置点来绘制线段,同一个集合中的点都会被连起来。
线条颜色可以通过十六进制(HEX)设置

lv_style_set_line_color(&lineStyle2, lv_color_hex(0x00FF00));

先绘制背景,在背景上绘制线段,再通过线颜色确定板子的颜色格式
lvgl自带就有一个白色的背景,等于说lv_scr_act()就是白色全屏幕背景,不知道这个是lvgl自带还是显示驱动移植是设置的。

绘制背景加线段时会报错,堆栈溢出,不知道哪里设置错了。

#if  whiteBackGround
  lv_obj_t *whiteBG = lv_obj_create(lv_scr_act());
  lv_obj_set_size(whiteBG, LV_HOR_RES, LV_VER_RES);
  lv_obj_align(whiteBG, LV_ALIGN_TOP_LEFT, 0, 0);
  lv_obj_set_style_bg_color(whiteBG, lv_color_hex(0xFFFFFFFF), 0);
  lv_obj_set_style_border_color(whiteBG, lv_color_hex(0xFFFFFFFF), 0);

#endif

#if line
  lv_point_t canvasPoints1[] = {{0, 0}, {100, 100}};
  lv_point_t canvasPoints2[] = {{0,0}, {0, 1280}};

  lv_style_t lineStyle;
  lv_style_init(&lineStyle);
  lv_style_set_line_color(&lineStyle, lv_color_hex(0x00FF00FF));
  lv_style_set_line_width(&lineStyle, 5);

  lv_style_t lineStyle2;
  lv_style_init(&lineStyle2);
  lv_style_set_line_color(&lineStyle2, lv_color_hex(0xFF00FF00));
  lv_style_set_line_width(&lineStyle2, 5);

  lv_obj_t *line1 = lv_obj_create(whiteBG);
  lv_line_set_points(line1, canvasPoints1, 2);
  lv_obj_add_style(line1, &lineStyle, 0);

  /*lv_obj_t *line2 = lv_obj_create(whiteBG);
  lv_line_set_points(line2, canvasPoints2, 2);
  lv_obj_add_style(line2, &lineStyle2, 0);*/
#endif

测试出来,不是背景问题,是绘制线段时报错

    lv_point_t canvasPoints1[] = {{0, 0}, {70, 0}};

    lv_style_t lineStyle;
    lv_style_init(&lineStyle);
    lv_style_set_line_color(&lineStyle, lv_color_hex(0xFF0000));
    lv_style_set_line_width(&lineStyle, 5);

    lv_obj_t* line1 = lv_obj_create(lv_scr_act());
    lv_line_set_points(line1, canvasPoints1, 2);
    lv_obj_add_style(line1, &lineStyle, 0);

绘制线段报错
错误很简单,应该用lv_line_create而不是lv_obj_create
测试出来板子颜色格式应该是BGR,
stytle应该是全局的,有border跟pad,outline

2.批量绘制线段

在绘制未知数量的线段时,不应用静态数组,而是动态申请空间以存储点信息

  int canvasLinesNum = getCanvasLinesNum();
  lv_point_t *canvasPoints[canvasLinesNum];
  lv_obj_t *lines[canvasLinesNum];
 for(int i = 1; i <= canvasLinesNum; i++){
    canvasPoints[i - 1] = lv_mem_alloc(2 * sizeof(lv_point_t));
    if (canvasPoints[i - 1] == NULL) {
      // 内存分配失败,进行错误处理
      printf("lv_mem_alloc failed\n");
      continue;
    }
    canvasPoints[i - 1][0].x = canvasLine.startPoint[0];
    canvasPoints[i - 1][0].y = canvasLine.startPoint[1];
    canvasPoints[i - 1][1].x = canvasLine.endPoint[0];
    canvasPoints[i - 1][1].y = canvasLine.endPoint[1];
    printf("canvasPoints: %d,%d, %d,%d\n",
        canvasPoints[i - 1][0].x, canvasPoints[i - 1][0].y,
        canvasPoints[i - 1][1].x, canvasPoints[i - 1][1].y);
    lines[i - 1] = lv_line_create(whiteBG);
    lv_line_set_points(lines[i - 1], canvasPoints[i - 1], 2);
    lv_obj_add_style(lines[i - 1], &lineStyle, 0);

  }

  //注意释放
  for(int i = 0; i < canvasLinesNum; i++){
    lv_mem_free(canvasPoints[i]);
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值