LVGL v8 扇形遮罩(Sector)
lvsf_sector 是 SiFli 基于 lv_img 封装的自定义控件,用一个扇形(角度)遮罩把一张图片揭示成饼形——把数值映射到角度,数值越大露出的扇形角度越大。先用 lv_img_set_src 设源图,再设角度跨度和数值范围,分配遮罩后用 lv_sector_set_value 驱动。
主要头文件:middleware/lvgl/lvsf/gui_widgets/lvsf_sector.h
范围设置:middleware/lvgl/lvsf/gui_widgets/lvsf_obj_ext.h(
lv_obj_set_range_scale/lv_obj_set_range_value)依赖控件:LVGL img(
LV_USE_IMG)示例工程:example/multimedia/lvgl/lvgl_v8_sector
功能简介
用角度遮罩把图片揭示成饼形/扇形,数值映射到角度。
基于
lv_img,直接复用lv_img_set_src设置源图。支持角度跨度(
lv_obj_set_range_scale)和数值范围(lv_obj_set_range_value)配置。支持拖动修改扇形进度。
支持指示器图像及其 X/Y 偏移。
通过
lv_sector_validate()分配角度遮罩缓冲。
使用场景
饼图、环形进度仪表盘。
时钟表盘、音量/电量扇形指示。
数值到角度映射的圆形进度揭示动画。
支持的开发板
sf32lb52-lcd_n16r8
sf32lb52-lchspi-ulp
配置与初始化
lvsf_sector 依赖 LVGL img 组件。在 menuconfig 中确认已开启:
CONFIG_LV_USE_IMG=y
BSP 中通过 LVSF_USE_SECTOR 宏控制该控件的编译。
创建对象的最小流程:
#include "lvsf_sector.h"
#include "lvsf_obj_ext.h"
lv_obj_t *sector = lv_sector_create(lv_scr_act());
lv_img_set_src(sector, &img_dsc);
API 说明
创建与刷新
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
创建扇形对象 |
|
|
刷新定时器回调 |
|
配置与验证
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
验证并分配角度遮罩缓冲 |
|
|
刷新遮罩范围 |
|
|
设置扇形值 |
|
|
启用/禁用拖动 |
|
指示器与图片
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
设置指示器图像 |
|
|
设置指示器偏移 |
|
|
设置指示器 X 偏移 |
|
|
设置指示器 Y 偏移 |
|
查询接口
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
获取起始角度 |
返回起始角度 |
|
获取结束角度 |
返回结束角度 |
|
获取背景图像 |
返回背景图像对象指针 |
|
获取指示器图像 |
返回指示器图像对象指针 |
典型用法
#include "lvsf_sector.h"
#include "lvsf_obj_ext.h" /* lv_obj_set_range_scale / lv_obj_set_range_value */
lv_obj_t *sector = lv_sector_create(parent);
lv_img_set_src(sector, &img_dsc); /* 源图(sector 基于 lv_img) */
lv_obj_set_size(sector, 140, 140);
lv_obj_set_style_img_opa(sector, LV_OPA_COVER - 1, LV_PART_MAIN); /* 防残影 */
lv_obj_set_range_scale(sector, 0, 360); /* 角度跨度(整圈) */
lv_obj_set_range_value(sector, 0, 100); /* 数值范围 */
lv_sector_validate(sector); /* 分配角度遮罩缓冲 */
lv_sector_set_value(sector, 50); /* 数值->角度:50 即半圈 180° */
警告
设好角度跨度和数值范围后,必须先调用
lv_sector_validate()分配角度遮罩缓冲,之后才能lv_sector_set_value()。把图片不透明度设为略低于
LV_OPA_COVER(即LV_OPA_COVER - 1):让底层lv_img的 cover-check 返回 NOT_COVER,父对象会重绘遮罩挡住的区域,否则被遮住的部分会留下残影。
效果展示
运行 lvgl_v8_sector example 可查看实际效果:屏幕中央有一块橙色图,被扇形遮罩裁成饼形。数值由定时器在 0~100 之间往返驱动,扇形角度反复增大到整圈、再缩回。
参考文档
源码路径:
middleware/lvgl/lvsf/gui_widgets/lvsf_sector.h示例路径:
example/multimedia/lvgl/lvgl_v8_sector