OpenEdv-开源电子网

 找回密码
 立即注册
查看: 6369|回复: 6

littlevgl lv_gauge仪表盘指针的长度怎么改,

[复制链接]

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2015-11-25
在线时间
25 小时
发表于 2020-11-16 15:52:19 | 显示全部楼层 |阅读模式
littlevgl  lv_gauge仪表盘指针的长度怎么改,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2012-5-3
在线时间
60 小时
发表于 2020-12-17 14:59:26 | 显示全部楼层
这个改不了,跟底盘变大变小的
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2015-11-25
在线时间
25 小时
 楼主| 发表于 2021-1-4 15:32:38 | 显示全部楼层
知道了,只能改底盘
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-23
在线时间
3 小时
发表于 2021-1-8 11:42:02 | 显示全部楼层

修改static void lv_gauge_draw_needle()函数


  1. static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * clip_area)
  2. {lv_style_int_t pad = lv_obj_get_style_pad_inner(dial, LV_DIAL_PART_NEEDLE);
  3. lv_style_int_t left = lv_obj_get_style_pad_left(dial, LV_DIAL_PART_MAIN);
  4. lv_style_int_t right = lv_obj_get_style_pad_right(dial, LV_DIAL_PART_MAIN);
  5. lv_style_int_t top = lv_obj_get_style_pad_top(dial, LV_DIAL_PART_MAIN);

  6. lv_coord_t r = (lv_obj_get_width(dial) - left - right) / 2 - pad;
  7. lv_coord_t r_needle[3];     //三根指针长度不一,各自分开储存   //----- 增加 - By XXX 20201116
  8. for (uint8_t needle_id = 0; needle_id < 3; needle_id++) //将 needle_pad[3] 代入计算   //----- 增加 - By XXX 20201116
  9. {
  10.     r_needle[needle_id] = (lv_obj_get_width(dial) - left - right) / 2 - needle_pad[needle_id];
  11. }
  12. lv_coord_t x_ofs = dial->coords.x1 + r + left + pad;
  13. lv_coord_t y_ofs = dial->coords.y1 + r + top + pad;
  14. uint16_t angle = lv_linemeter_get_scale_angle(dial);
  15. int16_t angle_ofs = 90 + (360 - angle) / 2 + lv_dial_get_angle_offset(dial);
  16. int16_t min = lv_dial_get_min_value(dial);
  17. int16_t max = lv_dial_get_max_value(dial);
  18. lv_point_t p_mid;
  19. lv_point_t p_end;
  20. uint8_t i;

  21. lv_draw_line_dsc_t line_dsc;
  22. lv_draw_img_dsc_t img_dsc;
  23. if (ext->needle_img == NULL) {
  24.     lv_draw_line_dsc_init(&line_dsc);
  25.     lv_obj_init_draw_line_dsc(dial, LV_DIAL_PART_NEEDLE, &line_dsc);
  26. }
  27. else {
  28.     lv_draw_img_dsc_init(&img_dsc);
  29.     lv_obj_init_draw_img_dsc(dial, LV_DIAL_PART_NEEDLE, &img_dsc);
  30. }

  31. p_mid.x = x_ofs;
  32. p_mid.y = y_ofs;
  33. for (i = 0; i < ext->needle_count; i++) {
  34.     /*Calculate the end point of a needle*/
  35.     int16_t needle_angle =
  36.         (ext->values[i] - min) * angle / (max - min) + angle_ofs;

  37.     /*Draw line*/
  38.     if (ext->needle_img == NULL) {
  39.         //p_end.y = (_lv_trigo_sin(needle_angle) * r) / LV_TRIGO_SIN_MAX + y_ofs;
  40.         //p_end.x = (_lv_trigo_sin(needle_angle + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
  41.         p_end.y = (_lv_trigo_sin(needle_angle) * r_needle[i]) / LV_TRIGO_SIN_MAX + y_ofs;   //----- 修改 - By XXX 20201116
  42.         p_end.x = (_lv_trigo_sin(needle_angle + 90) * r_needle[i]) / LV_TRIGO_SIN_MAX + x_ofs;   //----- 修改 - By XXX 20201116

  43.         /*Draw the needle with the corresponding color*/
  44.         if (ext->needle_colors != NULL) line_dsc.color = ext->needle_colors[i];

  45.         line_dsc.width = needle_width[i];   //三根指针不同宽度  //----- 增加 - By XXX 20201116
  46.         lv_draw_line(&p_mid, &p_end, clip_area, &line_dsc);
  47.     }
  48.     /*Draw image*/
  49.     else {
  50.         lv_img_header_t info;
  51.         //lv_img_decoder_get_info(ext->needle_img, &info);
  52.         lv_img_decoder_get_info(needle_img[i], &info);    //三根指针不同图片  //----- 修改 - By

  53.         lv_area_t a;
  54.         //a.x1 = dial->coords.x1 + lv_area_get_width(&dial->coords) / 2 - ext->needle_img_pivot.x;
  55.         //a.y1 = dial->coords.y1 + lv_area_get_height(&dial->coords) / 2 - ext->needle_img_pivot.y;
  56.         a.x1 = dial->coords.x1 + lv_area_get_width(&dial->coords) / 2 - needle_img_pivot[i].x;    //----- 修改 - By XXX  20201126
  57.         a.y1 = dial->coords.y1 + lv_area_get_height(&dial->coords) / 2 - needle_img_pivot[i].y;   //----- 修改 - By XXX  20201126
  58.         a.x2 = a.x1 + info.w - 1;
  59.         a.y2 = a.y1 + info.h - 1;
  60.         //img_dsc.pivot.x = ext->needle_img_pivot.x;
  61.         //img_dsc.pivot.y = ext->needle_img_pivot.y;
  62.         img_dsc.pivot.x = needle_img_pivot[i].x;  //----- 修改 - By XXX 20201126
  63.         img_dsc.pivot.y = needle_img_pivot[i].y;  //----- 修改 - By XXX 20201126

  64.         if (ext->needle_colors != NULL) img_dsc.recolor = ext->needle_colors[i];

  65.         needle_angle = (needle_angle * 10);
  66.         if (needle_angle > 3600) needle_angle -= 3600;
  67.         img_dsc.angle = needle_angle;
  68.         //lv_draw_img(&a, clip_area, ext->needle_img, &img_dsc);
  69.         lv_draw_img(&a, clip_area, needle_img[i], &img_dsc);  //----- 修改 - By XXX 20201126
  70.     }
  71. }

  72. lv_draw_rect_dsc_t mid_dsc;
  73. lv_draw_rect_dsc_init(&mid_dsc);
  74. lv_obj_init_draw_rect_dsc(dial, LV_DIAL_PART_NEEDLE, &mid_dsc);
  75. lv_style_int_t size = lv_obj_get_style_size(dial, LV_DIAL_PART_NEEDLE) / 2;
  76. lv_area_t nm_cord;
  77. nm_cord.x1 = x_ofs - size;
  78. nm_cord.y1 = y_ofs - size;
  79. nm_cord.x2 = x_ofs + size;
  80. nm_cord.y2 = y_ofs + size;
  81. lv_draw_rect(&nm_cord, clip_area, &mid_dsc);
复制代码
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2015-11-25
在线时间
25 小时
 楼主| 发表于 2021-5-31 19:49:37 | 显示全部楼层
本帖最后由 汤焰 于 2021-5-31 20:19 编辑
sniper_15 发表于 2021-1-8 11:42
修改static void lv_gauge_draw_needle()函数
Draw image 这里我用3张图片替换 显示没有出来,  
Draw line这里用线倒是有显示3跟线,三根长度是有不同

大佬 方便提供下模拟器的代码吗? 我用你贴的代码 gauge没有显示
有几个还不清楚
lv_style_int_t needle_width[3];
lv_coord_t needle_pad[3];
lv_point_t needle_img_pivot[3];

回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2020-10-19
在线时间
11 小时
发表于 2021-8-14 15:34:36 | 显示全部楼层
最近我也在弄这种界面
回复 支持 反对

使用道具 举报

7

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2017-7-19
在线时间
85 小时
发表于 2022-1-27 10:05:34 | 显示全部楼层
本帖最后由 tianxiazone 于 2022-1-27 10:07 编辑

indic = lv_meter_add_needle_line(meter, scale, 5, lv_palette_main(LV_PALETTE_RED), 0);//创建一个指针  (父类,子类,指针的宽度,指针的颜色,指针的长度)
我用的是  LVGL 8.1 版本

微信截图_20220127100625.png
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 19:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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