lv_meter_create
用于创建仪表盘(Meter)控件的函数- lv_obj_t* lv_meter_create(lv_obj_t* parent);
- //parent:父对象指针
- //ret:返回创建的仪表盘对象指针(lv_obj_t* 类型),若创建失败则返回 NULL
复制代码 lv_meter_add_scale
用于向仪表盘(Meter)添加刻度盘的函数- lv_meter_scale_t* lv_meter_add_scale(lv_obj_t* meter);
- //meter:仪表盘对象指针
- //ret:返回新刻度盘的指针(lv_meter_scale_t* 类型),用于后续配置
复制代码 lv_meter_set_scale_ticks
用于设置仪表盘(lv_meter)刻度线的函数- void lv_meter_set_scale_ticks(lv_obj_t * meter, lv_meter_scale_t * scale, uint16_t cnt, uint16_t width, uint16_t len, lv_color_t color);
- //meter:指向仪表盘对象的指针
- //scale:指向刻度表对象的指针,该刻度表是通过 lv_meter_add_scale 添加到仪表盘中的
- //cnt:小刻度线的数量
- //width:小刻度线的宽度
- //len:小刻度线的长度
- //color:小刻度线的颜色
复制代码 lv_meter_set_scale_major_ticks
用于设置仪表盘(lv_meter)主刻度线的函数- void lv_meter_set_scale_major_ticks(lv_obj_t * meter, lv_meter_scale_t * scale, uint16_t nth, uint16_t width, uint16_t len, lv_color_t color, int16_t label_gap);
- //meter:指向仪表盘对象的指针
- //scale:指向刻度表对象的指针,该刻度表是通过 lv_meter_add_scale 添加到仪表盘中的
- //nth:每隔多少个小刻度绘制一个主刻度
- //width:主刻度线的宽度
- //len:主刻度线的长度
- //color:主刻度线的颜色
- //label_gap:主刻度线与标签之间的距离
复制代码 lv_meter_set_scale_range
用于设置仪表盘(lv_meter)刻度范围和角度的函数- void lv_meter_set_scale_range(lv_obj_t * meter, lv_meter_scale_t * scale, int32_t min, int32_t max, uint32_t angle_range, uint32_t rotation);
- //meter:指向仪表盘对象的指针
- //scale:指向刻度表对象的指针,该刻度表是通过 lv_meter_add_scale 添加到仪表盘中的
- //min:刻度表的最小值
- //max:刻度表的最大值
- //angle_range:刻度表的角度范围(以度为单位)
- //rotation:刻度表的旋转角度(以度为单位),从 3 点钟方向顺时针旋转
复制代码 lv_meter_add_needle_line
用于向仪表盘(lv_meter)添加指针线的函数- lv_meter_indicator_t * lv_meter_add_needle_line(lv_obj_t * meter, lv_meter_scale_t * scale, uint16_t width, lv_color_t color, int16_t r_mod);
- //meter:指向仪表盘对象的指针
- //scale:指向刻度表对象的指针,该刻度表是通过 lv_meter_add_scale 添加到仪表盘中的
- //width:指针线的宽度
- //color:指针线的颜色
- //r_mod:指针线长度的调整值。正值会使指针线更长,负值会使指针线更短
- //ret:返回一个 lv_meter_indicator_t 类型的指针,表示新添加的指针线
复制代码 lv_meter_add_needle_img
用于向仪表盘(lv_meter)添加指针图片的函数- lv_meter_indicator_t * lv_meter_add_needle_img(lv_obj_t * meter, lv_meter_scale_t * scale, const void * img_src, uint16_t pivot_x, uint16_t pivot_y);
- //meter:指向仪表盘对象的指针
- //scale:指向刻度表对象的指针,该刻度表是通过 lv_meter_add_scale 添加到仪表盘中的
- //img_src:指针图片的资源,可以是图片的路径或图片描述符
- //pivot_x:图片旋转中心点的 x 坐标,相对于图片左上角的偏移量
- //pivot_y:图片旋转中心点的 y 坐标,相对于图片左上角的偏移量
- //ret:返回一个 lv_meter_indicator_t 类型的指针,表示新添加的指针图
复制代码 lv_meter_add_arc
用于向仪表盘(Meter)添加弧形指示器的函数- lv_meter_indicator_t* lv_meter_add_arc(
- lv_obj_t* meter, // 仪表盘对象
- lv_meter_scale_t* scale, // 绑定的刻度盘
- uint16_t width, // 弧线宽度(像素)
- lv_color_t color, // 弧线颜色
- int16_t r_mod // 半径调整值(正数外扩,负数内缩)
- );
- //ret:返回弧形指示器的指针(lv_meter_indicator_t*),用于后续动态更新数值
复制代码 lv_meter_add_scale_lines
用于向仪表盘(Meter)的刻度盘添加颜色渐变刻度线的函数- lv_meter_indicator_t* lv_meter_add_scale_lines(
- lv_obj_t* meter, // 仪表盘对象
- lv_meter_scale_t* scale, // 绑定的刻度盘
- lv_color_t color_start, // 起始颜色
- lv_color_t color_end, // 结束颜色
- bool local, // 颜色渐变范围是否基于指示器自身
- int16_t width_mod // 刻度线宽度调整值(像素)
- );
- //ret:返回刻度线指示器的指针(lv_meter_indicator_t*),用于后续动态调整数值范围
复制代码 lv_meter_set_indicator_value
用于设置仪表盘(lv_meter)指针(指示器)值的函数。通过这个函数,可以动态地调整指针在仪表盘上的位置,以反映不同的数据值- void lv_meter_set_indicator_value(lv_obj_t * meter, lv_meter_indicator_t * indic, int32_t value);
- //meter:指向仪表盘对象的指针
- //indic:指向要设置值的指针(指示器)的指针,该指针是通过 lv_meter_add_needle_line、lv_meter_add_needle_img 或其他相关函数创建的。
- //value:要设置的值,该值必须在仪表盘刻度范围(通过 lv_meter_set_scale_range 设置)内
复制代码 lv_meter_set_indicator_start_value
用于设置仪表盘(Meter)指示器起始值的核心函数- void lv_meter_set_indicator_start_value(
- lv_obj_t* obj, // 仪表盘对象指针
- lv_meter_indicator_t* indic, // 指示器指针(由添加函数返回)
- int32_t value // 起始值(需在刻度盘范围内)
- );
复制代码 lv_meter_set_indicator_end_value
用于设置仪表盘(Meter)指示器结束值的核心函数- void lv_meter_set_indicator_end_value(
- lv_obj_t* obj, // 仪表盘对象指针
- lv_meter_indicator_t* indic, // 指示器指针(由添加函数返回)
- int32_t value // 结束值(需在刻度盘范围内)
- );
复制代码- // 定义一个全局变量,用于存储仪表盘对象
- static lv_obj_t * meter;
- // 定义一个回调函数,用于设置指针的值
- static void set_value(void * indic, int32_t v)
- {
- // 调用 LVGL 的函数,设置指针的结束值
- lv_meter_set_indicator_end_value(meter, indic, v);
- }
- /**
- * 创建一个类似时钟的仪表盘示例
- */
- void lv_example_meter_3(void)
- {
- // 创建一个仪表盘对象,并将其添加到当前屏幕
- meter = lv_meter_create(lv_scr_act());
- lv_obj_set_size(meter, 220, 220); // 设置仪表盘的大小
- lv_obj_center(meter); // 将仪表盘居中
- // 创建一个刻度表,用于表示分钟
- lv_meter_scale_t * scale_min = lv_meter_add_scale(meter);
- // 设置分钟刻度表的小刻度:61 个小刻度,覆盖 360 度
- lv_meter_set_scale_ticks(meter, scale_min, 61, 1, 10, lv_palette_main(LV_PALETTE_GREY));
- // 设置分钟刻度表的值范围和角度范围:0 到 60,覆盖 360 度,起始角度为 270 度
- lv_meter_set_scale_range(meter, scale_min, 0, 60, 360, 270);
- // 创建另一个刻度表,用于表示小时
- lv_meter_scale_t * scale_hour = lv_meter_add_scale(meter);
- // 设置小时刻度表的小刻度:12 个小刻度,不显示小刻度线
- lv_meter_set_scale_ticks(meter, scale_hour, 12, 0, 0, lv_palette_main(LV_PALETTE_GREY));
- // 设置小时刻度表的主刻度:每个刻度都是主刻度,长度为 20 像素,颜色为黑色,标签距离为 10 像素
- lv_meter_set_scale_major_ticks(meter, scale_hour, 1, 2, 20, lv_color_black(), 10);
- // 设置小时刻度表的值范围和角度范围:1 到 12,覆盖 330 度,起始角度为 300 度
- lv_meter_set_scale_range(meter, scale_hour, 1, 12, 330, 300);
- // 声明一个图片资源(假设 img_hand 是一个指向右侧的指针图片)
- LV_IMG_DECLARE(img_hand);
- // 添加分钟指针,使用图片作为指针
- lv_meter_indicator_t * indic_min = lv_meter_add_needle_img(meter, scale_min, &img_hand, 5, 5);
- // 添加小时指针,使用图片作为指针(注意:这里应该使用 scale_hour,但示例代码中错误地使用了 scale_min)
- lv_meter_indicator_t * indic_hour = lv_meter_add_needle_img(meter, scale_min, &img_hand, 5, 5);
- // 创建一个动画对象,用于动态更新分钟指针的位置
- lv_anim_t a;
- lv_anim_init(&a); // 初始化动画对象
- lv_anim_set_exec_cb(&a, set_value); // 设置动画的执行回调函数
- lv_anim_set_values(&a, 0, 60); // 设置动画的起始值和结束值
- lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE); // 设置动画无限重复
- lv_anim_set_time(&a, 2000); // 设置动画时长为 2 秒(模拟 1 小时)
- lv_anim_set_var(&a, indic_min); // 设置动画作用的对象为分钟指针
- lv_anim_start(&a); // 启动动画
- // 创建另一个动画对象,用于动态更新小时指针的位置
- lv_anim_set_var(&a, indic_hour); // 设置动画作用的对象为小时指针
- lv_anim_set_time(&a, 24000); // 设置动画时长为 24 秒(模拟 12 小时)
- lv_anim_set_values(&a, 0, 60); // 设置动画的起始值和结束值
- lv_anim_start(&a); // 启动动画
- }
复制代码- // 定义一个全局变量,用于存储仪表盘对象
- static lv_obj_t * meter;
- // 定义一个回调函数,用于设置指示器的值
- static void set_value(void * indic, int32_t v)
- {
- // 调用 LVGL 的函数,设置指示器的结束值
- lv_meter_set_indicator_end_value(meter, indic, v);
- }
- /**
- * 创建一个带有多个弧形指示器的仪表盘
- */
- void lv_example_meter_2(void)
- {
- // 创建一个仪表盘对象,并将其添加到当前屏幕
- meter = lv_meter_create(lv_scr_act());
- lv_obj_center(meter); // 将仪表盘居中
- lv_obj_set_size(meter, 200, 200); // 设置仪表盘的大小
- // 移除仪表盘中间的圆形指示器(默认样式中有一个圆形指示器)
- lv_obj_remove_style(meter, NULL, LV_PART_INDICATOR);
- // 添加一个刻度表
- lv_meter_scale_t * scale = lv_meter_add_scale(meter);
- // 设置刻度表的小刻度:11 个小刻度,宽度为 2 像素,长度为 10 像素,颜色为灰色
- lv_meter_set_scale_ticks(meter, scale, 11, 2, 10, lv_palette_main(LV_PALETTE_GREY));
- // 设置刻度表的主刻度:每隔 1 个小刻度有一个主刻度,宽度为 2 像素,长度为 30 像素,颜色为浅灰色,标签距离为 15 像素
- lv_meter_set_scale_major_ticks(meter, scale, 1, 2, 30, lv_color_hex3(0xeee), 15);
- // 设置刻度表的值范围和角度范围:0 到 100,覆盖 270 度,起始角度为 90 度
- lv_meter_set_scale_range(meter, scale, 0, 100, 270, 90);
- // 添加三个弧形指示器
- // 第一个弧形指示器:宽度为 10 像素,颜色为红色,偏移量为 0
- lv_meter_indicator_t * indic1 = lv_meter_add_arc(meter, scale, 10, lv_palette_main(LV_PALETTE_RED), 0);
- // 第二个弧形指示器:宽度为 10 像素,颜色为绿色,偏移量为 -10
- lv_meter_indicator_t * indic2 = lv_meter_add_arc(meter, scale, 10, lv_palette_main(LV_PALETTE_GREEN), -10);
- // 第三个弧形指示器:宽度为 10 像素,颜色为蓝色,偏移量为 -20
- lv_meter_indicator_t * indic3 = lv_meter_add_arc(meter, scale, 10, lv_palette_main(LV_PALETTE_BLUE), -20);
- // 创建一个动画对象,用于动态更新指示器的值
- lv_anim_t a;
- lv_anim_init(&a); // 初始化动画对象
- lv_anim_set_exec_cb(&a, set_value); // 设置动画的执行回调函数
- lv_anim_set_values(&a, 0, 100); // 设置动画的起始值和结束值
- lv_anim_set_repeat_delay(&a, 100); // 设置动画重复之间的延迟时间
- lv_anim_set_playback_delay(&a, 100); // 设置动画回放之间的延迟时间
- lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE); // 设置动画无限重复
- // 为第一个指示器设置动画
- lv_anim_set_time(&a, 2000); // 设置动画时长为 2000 毫秒
- lv_anim_set_playback_time(&a, 500); // 设置动画回放时长为 500 毫秒
- lv_anim_set_var(&a, indic1); // 设置动画作用的对象为第一个指示器
- lv_anim_start(&a); // 启动动画
- // 为第二个指示器设置动画
- lv_anim_set_time(&a, 1000); // 设置动画时长为 1000 毫秒
- lv_anim_set_playback_time(&a, 1000); // 设置动画回放时长为 1000 毫秒
- lv_anim_set_var(&a, indic2); // 设置动画作用的对象为第二个指示器
- lv_anim_start(&a); // 启动动画
- // 为第三个指示器设置动画
- lv_anim_set_time(&a, 1000); // 设置动画时长为 1000 毫秒
- lv_anim_set_playback_time(&a, 2000); // 设置动画回放时长为 2000 毫秒
- lv_anim_set_var(&a, indic3); // 设置动画作用的对象为第三个指示器
- lv_anim_start(&a); // 启动动画
- }
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |