lvgl v8 arc

使用lvgl创建弧形界面
本文介绍如何在新项目手表界面中利用lvgl库创建弧形效果。通过设置旋转角度、背景弧度、对象大小、颜色和宽度,实现特定的弧形显示,并展示最终运行结果。

最近公司开了一个新项目手表,需要做这么一个界面,如图所示

网上查了很多关于arc的博客,要么是v7的,要么就是最基本的,很难满足想要达到的结果。

我直接上代码了:

lv_obj_t* arc1 = lv_arc_create(lv_scr_act());
    lv_arc_set_rotation(arc1, 180);
    lv_arc_set_bg_angles(arc1, 348, 193);//12+0+193 = 205°
    lv_obj_set_size(arc1, LV_HOR_RES * 0.916, LV_HOR_RES * 0.916);
    lv_obj_set_style_arc_color(arc1, lv_color_hex(0x333333), LV_PART_MAIN);
    lv_obj_set_style_arc_color(arc1, lv_color_hex(0x48CFBD), LV_PART_INDICATOR);
    lv_obj_set_style_arc_width(arc1, LV_HOR_RES * 0.012, LV_PART_MAIN);
    lv_obj_set_style_arc_width(arc1, LV_HOR_RES * 0.012, LV_PART_INDICATOR);
    lv_obj_remove_style(arc1, NULL, LV_PART_KNOB);   /*Be su

### 创建和使用 LVGL 框架中的弧形控件 在 LVGL 中,`arc` 控件用于绘制圆环或扇区形状。这些图形常被用来表示进度条、仪表盘或其他圆形界面元素。 #### 初始化 Arc 控件 为了创建一个新的 `arc` 对象并将其添加到指定父容器中,可以调用函数 `lv_arc_create(lv_obj_t *parent)`[^4]。此方法返回指向新建对象的指针,在后续操作里需要用到它来设置属性等。 ```c // 假设已经存在一个有效的 lvgl 显示设备初始化过程... lv_obj_t * arc; arc = lv_arc_create(parent_container); // parent_container 是先前定义好的其他组件或者是屏幕根节点 (NULL 表示默认) ``` #### 设置基本参数 通过一系列 API 函数可配置该控件的具体样式: - **角度范围**:设定起始角与结束角决定显示的角度区间。 ```c lv_arc_set_range(arc, start_angle, end_angle); ``` - **旋转方向**:顺时针还是逆时针 ```c lv_arc_set_rotation_dir(arc, direction_flag); ``` - **背景颜色填充模式** ```c lv_arc_set_bg_color_mode(arc, mode_value); ``` 以上仅列举了一些常用接口;更多细节参阅官方文档获取完整的功能列表[^4]。 #### 动态更新数值 当希望随着某些条件变化而改变弧线所代表的比例关系时,则需定期调整当前值对应的度数位置: ```c lv_arc_set_value(arc, new_degree_position); ``` 这里假设有一个定时器或者其他事件触发机制能够周期性地提供最新的百分比数据转换成相应的角度偏移量传递给上述命令完成实时刷新效果[^4]。 #### 完整实例代码展示 下面给出一段简单的例子说明如何组合前面介绍过的知识点构建一个动态更新的小部件: ```c #include "lvgl/lvgl.h" static void update_progress(void* obj, int32_t value){ lv_arc_set_value(obj, value % 360); } void create_dynamic_arc_example(){ static lv_style_t style; lv_style_init(&style); /* Customize the appearance */ lv_style_set_radius(&style, LV_RADIUS_CIRCLE); lv_style_set_bg_opa(&style, LV_OPA_COVER); lv_style_set_bg_grad_dir(&style,LV_GRAD_DIR_HOR); lv_style_set_bg_main_stop(&style,0); lv_style_set_bg_end_stop(&style,100); lv_obj_add_style(style, NULL); lv_obj_t * screen = lv_scr_act(); lv_obj_t * myArc = lv_arc_create(screen); lv_obj_add_style(myArc,&style,0); lv_obj_align(myArc,NULL,LV_ALIGN_CENTER,0,-50); lv_arc_set_range(myArc, 0, 360); lv_timer_create(update_progress, 1000, myArc); } ``` 这段程序会在屏幕上居中放置一条不断自转着的彩色渐变带状物作为视觉反馈元件[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值