LVGL8.3 --lv_arc 圆弧

本文详细介绍了LVGL中的Arc组件,包括其组成部分、值和范围设置、旋转、半径与圆角控制,以及相关的API函数,帮助开发者更好地理解和应用这一控件。
摘要由CSDN通过智能技术生成

一、Arc 简介

1.1 Overview(概述)

圆弧由背景和前景弧组成。前景(指示器)可以进行触摸调整。

1.2 Parts and Styles(部分和风格)

  • LV_PART_MAIN: 圆弧的背景部分。使用典型的背景样式属性绘制背景,使用圆弧样式属性绘制圆弧。 圆弧的大小和位置可以通过
    padding 样式调整。
  • LV_PART_INDICATOR: 圆弧的指示器部分。使用 arc 样式属性绘制另一个圆弧。 它的填充值是相对于背景弧来设置的。
  • LV_PART_KNOB:圆弧的旋钮部分。使用所有背景属性和填充值在指标的末尾绘制一个旋钮。如果使用零填充,旋钮大小与指示器的宽度相同。较大的填充使其更大,较小的填充使其更小。

:使用样式时,修改LV_PART_MAIN和LV_PART_INDICATOR圆弧的style,需要设置arc_bg_color等,而不是bg_color。

二、Arc 使用

2.1 Value and range(值和范围)

2.11 零点

使用arc圆弧需要知道圆弧的起始点在哪,便于后续设置设置起始角度;零度位于对象的中间右侧(3 点钟方向),并且度数沿顺时针方向增加。 角度应在 [0;360] 范围内。
在这里插入图片描述

2.12 设置值和角度

设置圆弧的值,使用接口set_value,默认值是0-100

void lv_arc_set_range(lv_obj_t* obj, int16_t min, int16_t max); //设置value的范围
void lv_arc_set_value(lv_obj_t* obj, int16_t value); //设置arc的value具体指

设置圆弧的角度

void lv_arc_set_angles(lv_obj_t* obj, uint16_t start, uint16_t end);

也可以单独设置开始和结束的角度

void lv_arc_set_start_angle(lv_obj_t* obj, uint16_t start);
void lv_arc_set_end_angle(lv_obj_t* obj, uint16_t end);

设置圆弧背景的角度,注意这里的背景是指arc的主体,不是大背景

void lv_arc_set_bg_angles(lv_obj_t* obj, uint16_t start, uint16_t end);
void lv_arc_set_bg_start_angle(lv_obj_t* obj, uint16_t start);
void lv_arc_set_bg_end_angle(lv_obj_t* obj, uint16_t end);

2.2 Rotation(旋转)

可以使用 lv_arc_set_rotation(arc, deg) 添加到 0 度位置的偏移量,通过调整0度坐标来实现旋转。

2.3 半径和圆角

2.31 半径

LVGL没有提供设置圆弧半径的API,实际上我们可以修改arc对象的size来实现圆弧半径的修改 lv_obj_set_size 。
圆弧半径也就是大小的修改方式已经找到了,那还有一个重点就是圆弧的宽度怎么设置呢?
如果有使用过LVGL7.11版本的同学,在7.11版本设置arc圆弧的的宽度是采用设置line_width的,在8.3版本则是使用set_arc_width来设置的,较7.11版本更加直观。

void lv_obj_set_style_arc_width(struct _lv_obj_t* obj, lv_coord_t value, lv_style_selector_t selector) ;
//eg. 设置圆弧主体的宽度
lv_obj_set_style_arc_width(arc,20,LV_PART_MAIN);
//eg. 设置圆弧指示器的宽度
lv_obj_set_style_arc_width(arc,20,LV_PART_INDICATOR );

2.32 圆角

设置圆弧圆角,熟悉LVGL的同学可能会想到这个接口

void lv_obj_set_style_radius(struct _lv_obj_t* obj, lv_coord_t value, lv_style_selector_t selector);

但是真正使用这个接口去实现圆弧主体的圆角或直角时,发现设置为LV_PART_MAIN,并没有反应,是因为设置的selector 是圆弧的背景,这里的背景也有一样bg_opa透明度是默认设置为0的,当你把透明度设置为255后会发现。
在这里插入图片描述

因此设置圆弧是圆角还是直角是采用:

//注意:true: 圆形, false: 垂直线结束
void lv_obj_set_style_arc_rounded(struct _lv_obj_t* obj, bool value, lv_style_selector_t selector);

三、Arc API

lv_obj_t* lv_arc_create(lv_obj_t* parent);

void lv_arc_set_start_angle(lv_obj_t * arc, uint16_t start);			//设置圆弧的起始角度。0度:右,90度下等。
void lv_arc_set_end_angle(lv_obj_t * arc, uint16_t end);				//设置弧的结束角度。0度:右,90度下等。
void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end);	//设置起始和结束角度
void lv_arc_set_bg_start_angle(lv_obj_t * arc, uint16_t start);			//设置弧背景的起始角度。0度:右,90度下等。
void lv_arc_set_bg_end_angle(lv_obj_t * arc, uint16_t end);				//设置弧背景的起始角度。0度:右,90度下等。
void lv_arc_set_bg_angles(lv_obj_t * arc, uint16_t start, uint16_t end);//设置弧背景的起始角和结束角
void lv_arc_set_rotation(lv_obj_t * arc, uint16_t rotation);			//设置整个弧线的旋转
void lv_arc_set_mode(lv_obj_t * arc, lv_arc_mode_t type);				//设置圆弧类型。
void lv_arc_set_value(lv_obj_t * arc, int16_t value);					//在弧线上设置一个新值
void lv_arc_set_range(lv_obj_t * arc, int16_t min, int16_t max);		//设置圆弧的最大值和最小值
void lv_arc_set_change_rate(lv_obj_t * arc, uint16_t rate);				//设置一个变化率来限制电弧到达压下点的速度。

uint16_t lv_arc_get_angle_start(lv_obj_t * obj);						//获取弧的起始角度。
uint16_t lv_arc_get_angle_end(lv_obj_t * obj);							//获取弧的结束角。
uint16_t lv_arc_get_bg_angle_start(lv_obj_t * obj);						//获取弧背景的起始角度。
uint16_t lv_arc_get_bg_angle_end(lv_obj_t * obj);						//获取弧背景的结束角度。
int16_t lv_arc_get_value(const lv_obj_t * obj);							//获取弧的值
int16_t lv_arc_get_min_value(const lv_obj_t * obj);						//获取弧的最小值
int16_t lv_arc_get_max_value(const lv_obj_t * obj);						//获取弧线的最大值
lv_arc_mode_t lv_arc_get_mode(const lv_obj_t * obj);					//获取弧线是否为type类型。

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LVGL v8.3中,`lv_meter_set_indicator_start_value`函数已被移除,取而代之的是一个更通用的函数`lv_meter_set_scale`,用于设置Meter对象的刻度。 新函数的原型如下: ```c void lv_meter_set_scale(lv_obj_t * meter, const lv_meter_scale_t * scale); ``` 其中,`meter`是要设置的Meter对象的指针,`scale`是一个lv_meter_scale_t类型的结构体指针,用于描述Meter对象的刻度。 lv_meter_scale_t结构体定义如下: ```c typedef struct { int32_t min_value; /* 最小值 */ int32_t max_value; /* 最大值 */ uint16_t num_ticks; /* 刻度数量 */ uint16_t major_ticks; /* 大刻度数量 */ uint16_t line_count; /* 刻度线数量 */ uint16_t label_count; /* 标签数量 */ uint8_t label_format; /* 标签格式 */ const char ** labels; /* 标签指针 */ lv_coord_t line_width; /* 刻度线宽度 */ lv_coord_t label_gap; /* 标签间隔 */ lv_opa_t line_opa; /* 刻度线不透明度 */ const lv_style_t * line_style; /* 刻度线样式 */ const lv_style_t * major_tick_style;/* 大刻度样式 */ const lv_style_t * label_style; /* 标签样式 */ } lv_meter_scale_t; ``` 其中,`min_value`和`max_value`分别是Meter对象的刻度范围的最小值和最大值,`num_ticks`是刻度数量,`major_ticks`是大刻度数量,`line_count`是刻度线数量,`label_count`是标签数量,`label_format`是标签格式,`labels`是标签指针,`line_width`是刻度线宽度,`label_gap`是标签间隔,`line_opa`是刻度线不透明度,`line_style`是刻度线样式,`major_tick_style`是大刻度样式,`label_style`是标签样式。 例如,如果您要设置一个Meter对象的指针起始值为50,最小值为0,最大值为100,可以使用以下代码: ```c lv_obj_t *meter = lv_meter_create(parent, NULL); // 创建Meter对象 // 设置刻度 lv_meter_scale_t scale; lv_meter_scale_init(&scale); scale.min_value = 0; scale.max_value = 100; scale.num_ticks = 11; scale.major_ticks = 5; lv_meter_set_scale(meter, &scale); lv_meter_set_value(meter, 50); // 设置当前值为50 ``` 此函数适用于LVGL v8.3及以上版本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值