首页 > 其他分享 >【 lvgl专题】LVGL核心部件——弧(arc)控件的介绍

【 lvgl专题】LVGL核心部件——弧(arc)控件的介绍

时间:2025-01-07 22:55:13浏览次数:1  
标签:LV 控件 set obj lv arc lvgl PART

概述

本文介绍LVGL核心部件——弧(arc),它由背景和前景弧组成。前景(指示器)可以进行触摸调整。

 

LVGL核心部件——弧(arc)控件

一、部件和样式

  •  LV_PART_MAIN 使用典型的背景样式属性绘制背景,使用圆弧样式属性绘制圆弧。 圆弧的大小和位置将遵循 padding 样式属性。

  • LV_PART_INDICATOR 使用 arc 样式属性绘制另一个圆弧。 它的填充值是相对于背景弧来解释的。

  • LV_PART_KNOB 使用所有背景属性和填充值在指标的末尾绘制一个句柄。 使用零填充,旋钮大小与指示器的宽度相同。 较大的填充使其更大,较小的填充使其更小。

 

二、用法

值和范围

可以使用 lv_arc_set_value(arc, new_value) 设置新值。 该值在可以用lv_arc_set_range(arc, min, max)修改的范围(最小值和最大值)中解释。 默认范围是 1..100。

指示弧绘制在主零件的弧上。 如果该值设置为最大值,则指示器弧将覆盖整个“背景”弧。 要设置背景弧的开始和结束角度,请使用 lv_arc_set_bg_angles(arc, start_angle, end_angle) 函数或 lv_arc_set_bg_start/end_angle(arc, angle)。

零度位于对象的中间右侧(3 点钟方向),并且度数沿顺时针方向增加。 角度应在 [0;360] 范围内。

 

旋转

可以使用 lv_arc_set_rotation(arc, deg) 添加到 0 度位置的偏移量。

 

模式

弧可以是以下模式之一:

  •  LV_ARC_MODE_NORMAL 指标弧从最小值绘制到当前值。

  • LV_ARC_MODE_REVERSE 指标弧从最大值到当前值逆时针绘制。

  • LV_ARC_MODE_SYMMETRICAL 指标弧从中间点绘制到当前值。

模式可以通过lv_arc_set_mode (arc, LV_ARC_MODE_...) 设置,并且仅当角度由lv_arc_set_value()设置或通过手指调整弧度时使用。

 

变化率

如果弧被按下,当前值将根据设置的变化率以有限的速度设置。 变化率以度/秒为单位定义,可以用lv_arc_set_change_rage(arc, rate)设置。

 

手动设置指示器

也可以直接使用 lv_arc_set_angles(arc, start_angle, end_angle) 函数或 lv_arc_set_start/end_angle(arc, start_angle) 设置指标弧的角度。 在这种情况下,设置的“值”和“模式”将被忽略。

换句话说,设置角度和值是独立的。 您应该使用值和角度设置。 将两者混合可能会导致意外行为。

要使圆弧不可调整,请移除旋钮的样式并使对象不可点击:

lv_obj_remove_style(arc, NULL, LV_PART_KNOB);

lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE);

 

Events(事件)

  • 按下/拖动圆弧以设置新值时发送“LV_EVENT_VALUE_CHANGED”。

  •  LV_EVENT_DRAW_PART_BEGIN 和 LV_EVENT_DRAW_PART_END 使用以下类型发送:

o   LV_ARC_DRAW_PART_BACKGROUND 背景弧。

§  部分:LV_PART_MAIN

§  p1:圆弧的中心

§  radius:弧的半径

§  arc_dsc

o   LV_ARC_DRAW_PART_FOREGROUND 前景弧。

§  部分:LV_PART_INDICATOR

§  p1:圆弧的中心

§  radius:弧的半径

§  arc_dsc

o   LV_ARC_DRAW_PART_KNOB 旋钮

§  部分:LV_PART_KNOB

§  draw_area:旋钮的面积 -rect_dsc:

 

按键

·        LV_KEY_RIGHT/UP 将值增加一。

·        LV_KEY_LEFT/DOWN 将值减一。

 

Example

Simple Arc

 

#include "../../lv_examples.h"

#if LV_USE_ARC && LV_BUILD_EXAMPLES

void lv_example_arc_1(void)

{

  /*Create an Arc*/

  lv_obj_t * arc = lv_arc_create(lv_scr_act());

  lv_obj_set_size(arc, 150, 150);

  lv_arc_set_rotation(arc, 135);

  lv_arc_set_bg_angles(arc, 0, 270);

  lv_arc_set_value(arc, 40);

  lv_obj_center(arc);

}

#endif

 

Loader with Arc 

 

#include "../../lv_examples.h"

#if LV_USE_ARC && LV_BUILD_EXAMPLES

static void set_angle(void * obj, int32_t v)

{

    lv_arc_set_value(obj, v);

}

/**

 * Create an arc which acts as a loader.

 */

void lv_example_arc_2(void)

{

  /*Create an Arc*/

  lv_obj_t * arc = lv_arc_create(lv_scr_act());

  lv_arc_set_rotation(arc, 270);

  lv_arc_set_bg_angles(arc, 0, 360);

  lv_obj_remove_style(arc, NULL, LV_PART_KNOB);   /*Be sure the knob is not displayed*/

  lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE);  /*To not allow adjusting by click*/

  lv_obj_center(arc);

  lv_anim_t a;

  lv_anim_init(&a);

  lv_anim_set_var(&a, arc);

  lv_anim_set_exec_cb(&a, set_angle);

  lv_anim_set_time(&a, 1000);

  lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);    /*Just for the demo*/

  lv_anim_set_repeat_delay(&a, 500);

  lv_anim_set_values(&a, 0, 100);

  lv_anim_start(&a);
}

以上是关于LVGL核心部件——弧(arc)的使用介绍。

标签:LV,控件,set,obj,lv,arc,lvgl,PART
From: https://www.cnblogs.com/FBsharl/p/18658604

相关文章

  • [数据结构学习笔记8] 二叉查找树(Binary Search Trees)
    二叉查找树,它是一类特殊的二叉树,除了基本的二叉树规则外,还要满足:1.左边的子节点要小于父节点值2.右边的子节点要大于父节点值 图示:添加节点:        42       |   |      24  99      |    | ......
  • BUG:SWM32开机绘制lvgl框架下的某个自定义控件死机
    一.BUG描述现象1.画了一个关于"模式"的自定义控件,结果开机绘制总是死机。现象2.用keil进行仿真调试全速运行同样死机,但是如果在异常处加断点,然后单步调试就正常。(注:仿真调试比直接运行的速度要慢)现象3.把这个异常对象的创建代码删除,再后面加四个打印追踪,还是死机;但是删除两个......
  • 解决 Spring Boot 启动错误问题:elasticsearch-java 8.17.0 报 elasticsearch-rest-cli
    解决SpringBoot启动错误问题:Thefollowingmethoddidnotexistorg.elasticsearch.client.RequestOptions$Builder.setHttpAsyncResponseConsumerFactory异常分析与解决方案在使用SpringBoot应用时,可能会遇到以下启动错误:***************************APPLICATIONF......
  • Elasticsearch倒排索引
    正向索引我们先来回顾一下正向索引。例如有一张名为tb_goods的表:idtitleprice1小米手机34992华为手机49993华为小米充电器494小米手环49………其中的id字段已经创建了索引,由于索引底层采用了B+树结构,因此我们根据id搜索的速度会非常快。但是其他字段例如title,只在叶子节点......
  • Elasticsearch 字段多种类型处理
    背景​ 在搜索引擎和数据存储中,高效处理多样化的查询需求至关重要。以公司名称和时间字段为例,这些字段可能需要同时支持全文搜索和精确匹配。Elasticsearch提供了多字段功能,允许单个字段展示多种行为,例如分词搜索和精确匹配。本文将分析如何利用多字段功能,处理......
  • STM32F407ZG移植FreeRTOS(在有LVGL的基础上进行移植,附源码)
    目录1.准备资料1.1FreeRTOS源码获取1.2基础工程获取1.3精简FreeRTOS源码2.移植步骤2.1添加FreeRTOS源码2.1.1添加源码2.1.3添加路径2.2.添加FreeRTOSConfig.h配置文件2.2.1生成FreeRTOSConfig.h文件2.2.2配置FreeRTOSConfig.h文件2.3修改系统文件2.3.1修改sys.......
  • 基于Android7.0的Launcher3源码分析(2)——UI显示控件的组成
      开始系列文章前,先把Launcher显示相关的主要控件做个介绍。界面1上图就是通常所说的桌面部分,下面会做个简单介绍:   SearchDropTagetBar:搜索条和删除条   Workspace:只显示系统默认加载、用户手动拖入和应用自动生成的图标   BubbleTextView:显示应用图标的自定义......
  • Elasticsearch 支持哪些中文分词器?
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • [接上文]如何在 Arch 内核滚挂后跑路到 Debian12
    傻包Arch内核滚挂了,弃暗投明。默认你已安装了Windows和一个KernelPanic的ArchLinux。务必通读一遍教程再实践。关键步骤:选择强制UEFI引导。不使用网络安装。如果你的/home和/在同一分区,必须备份。根分区自行按情况备份。推荐使用LinuxReader。参考https://l......
  • Spring Boot 集成 Easysearch 完整指南
    Easysearch的很多用户都有这样的需要,之前是用的ES,现在要迁移到Easysearch,但是业务方使用的是SpringBoot集成的客户端,问是否能平滑迁移。Easysearch是完全兼容SpringBoot的,完全不用修改,本指南将探讨如何将SpringBoot和ES的high-level客户端与Easysearch进行集......