LVGL 控件之滑动条(lv_slider)

news2024/9/21 22:14:00

目录

  • 一、概述
  • 二、滑块
    • 1、设置滑块当前值和范围值
    • 2、设置滑块部件的模式
    • 3、禁用单击
    • 4、事件
    • 5、API 函数


一、概述

滑动条对象看起来像是在 进度条 增加了一个可以调节的旋钮,使用时可以通过拖动旋钮来设置一个值。 就像进度条(bar)一样,Slider 可以是垂直的或水平的(当设置进度条的宽度小于其高度,就可以创建出垂直摆放的滑动条)。

滑块部件由三个部分组成:主体背景、指示器和旋钮,示意图如下:

  • LV_PART_MAIN 滑动条的背景。 使用所有典型的背景样式属性。 设置 padding 样式会使指标在相应方向上变小。
  • LV_PART_INDICATOR 显示滑动条当前状态的指示器。 也是使用所有典型的背景样式属性。
  • LV_PART_KNOB 旋钮(可以是原形或矩形)。 也是使用所有典型的背景属性。 默认情况下,旋钮是方形的(带有可选的圆角半径),边长等于滑动条的较小边。 可以通过设置 padding 样式调整旋钮的大小。 填充值也可以是不对称的。

二、滑块

1、设置滑块当前值和范围值

默认情况下,滑块部件被创建出来后,它的当前值是 0,范围值是 0~100

  • 如果用户需要设置当前值,可调用 lv_slider_set_value 函数。
  • 如果用户需要设置范围值,可以调用 lv_slider_set_range 函数。

在水平模式下默认绘制方向为从左到右,并且垂直模式下从下到上。如果最小值大于最大值,如 100~0 时,绘制方向变为相反的方向。

lv_obj_t* slider = lv_slider_create(lv_scr_act());

lv_slider_set_range(slider,0,255);            /* 设置slider 部件范围值 */
lv_slider_set_value(slider,100, LV_ANIM_ON);  /* 设置slider 部件当前值 */

lv_obj_center(slider);

2、设置滑块部件的模式

除了默认的模式之外,滑块部件还可以配置为以下两种拓展模式:

  1. LV_SLIDER_MODE_SYMMETRICAL:无论当前值是正数还是负数,指示器始终从零绘制到当前值。
  2. LV_SLIDER_MODE_RANGE:允许调用lv_bar_set_start_value 函数设置起始值,该起始值必须小于结束值。

用户需要设置滑块部件的模式,可调用以下函数:

lv_slider_set_mode(slider, LV_SLIDER_MODE_…);

lv_obj_t* slider = lv_slider_create(lv_scr_act());

lv_slider_set_mode(slider, LV_SLIDER_MODE_SYMMETRICAL);  /* 设置slider 部件模式:始终从0 开始绘制指示器 */
lv_slider_set_range(slider,-100,100);                    /* 设置slider 部件数值范围 */
lv_obj_center(slider);


lv_obj_t* slider1 = lv_slider_create(lv_scr_act());

lv_slider_set_mode(slider1, LV_SLIDER_MODE_RANGE);  /* 创建slider1 部件模式:允许指定起始值 */
lv_bar_set_start_value(slider1,0,LV_ANIM_OFF);      /* 创建slider1 部件起始值 */
lv_slider_set_range(slider1, -100, 100);            /* 创建slider1 部件数值范围 */
lv_obj_align_to(slider1, slider,LV_ALIGN_OUT_BOTTOM_MID,0,30);

由上图可知:

  • LV_SLIDER_MODE_SYMMETRICAL 模式下,滑块始终是从 0 点开始绘制指示器;
  • 而在 LV_SLIDER_MODE_RANGE 模式下,滑块部件可以改变起始值,值得注意的是,起始值必须小于结束值(当前值)

3、禁用单击

默认情况下,用户可以通过拖动旋钮或者单击滑块的方式来调整指示器位置,而后者可能会导致当前值的突变,这在某些情景下是不允许出现的。如果用户想禁用单击调整当前值,可调用以下函数:

lv_obj_add_flag(slider, LV_OBJ_FLAG_ADV_HITTEST);

4、事件

  • LV_EVENT_VALUE_CHANGED 在拖动滑块或用键更改。当滑块处于被拖拽。
  • LV_EVENT_RELEASED 在刚刚释放滑块时发送。

void slider_event_cb(lv_event_t *e)
{
    printf("释放按钮\r\n");
}

void my_gui(void) {
    lv_obj_t* slider = lv_slider_create(lv_scr_act());

    lv_slider_set_range(slider,1,255);            /* 设置slider 部件范围值 */
    lv_slider_set_value(slider,100, LV_ANIM_ON);  /* 设置slider 部件当前值 */
    lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL); 

    lv_obj_center(slider);
}

5、API 函数

函数描述
lv_slider_create()创建滑块部件
lv_slider_set_value()设置当前值
lv_slider_set_left_value()设置左侧旋钮的值
lv_slider_set_range()设置范围值
lv_slider_set_mode()设置模式
lv_slider_get_value()获取当前值
lv_slider_get_left_value()获取左侧旋钮的值
lv_slider_get_min_value()获取最小值
lv_slider_get_max_value()获取最大值
lv_slider_is_dragged()判断滑块是否被拖动
lv_slider_get_mode()获取滑块部件模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2146735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

828华为云征文|采用华为云Flexus云服务器X实例部署MQTT服务器完成设备上云

文章目录 一、前言1.1 开发需求1.2 Flexus云服务器介绍1.3 EMQX服务器 二、服务器选购2.1 登录官网2.2 选购服务器2.3 选择服务器区域2.4 选择服务器规格2.5 选择系统镜像2.6 选择存储盘2.7 配置密码2.8 配置云备份2.9 确认配置2.10 立即购买2.10 后台控制台 三、服务器登录3.1…

最佳软件测试基础入门教程4静态测试

静态测试 对工作产品(文档和代码)进行静态测试和分析,对提高产品质量有很大的帮助。本章介绍了静态测试的一般情况,以及所涉及的具体过程,包括其活动和必须填补的角色。我们描述了四种经过验证的技术和它们的具体优势…

【HarmonyOS 】编译报错:Install Failed: error: failed to install bundle

此问题是由于支付宝sdk兼容性造成的,目前只能删除支付宝sdk依赖,如下图所示操作,删除后需要点右上角的 Sync Now,并等待 Sync 结束 删除后还需要点右上角的 Sync Now,并等待 Sync 结束 uniapp解决方案: htt…

50个必须知道的VS代码扩展

我们即将浏览50个必须知道的VS Code扩展,这些扩展将大幅提高您的生产力,并帮助您像专业人士一样编码! 1. TabNine TabNine 是一个基于AI的自动完成工具,它可以根据您的代码上下文和模式建议完成,通过智能自动完成提高…

6000 字掌握 Java IO 知识体系

“子谦,Java IO 也太上头了吧?”新兵蛋子小二向头顶很凉快的老韩抱怨道,“你瞧,我就按照传输方式对 IO 进行了一个简单的分类,就能搞出来这么多的玩意!” 好久没搞过 IO 了,老王看到这幅思维导图…

【HarmonyOS NEXT】DevEco快速实现真机截屏,并保存到电脑

点日志点照机图标选一个路径保存图片在ide中右键图片,点复制电脑随便找个位置保存图片https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-screenshot-V5

SpringBoot(40) — SpringBoot整合MyBatis-plus

前言 在上节中我们对MyBatis-plus特性有了一个整体的认识,然后也大致讲了些MyBatis与MyBatis-plus的不同之处。大家感兴趣的话,可参考以下文章 SpringBoot(39) — MyBatis-plus简介 这节我们来讲讲SpringBoot项目如何快速接入MyBatis-plus框架。 今天涉及…

Redis技术解析(基础篇)

1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 Redis-server NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至jso…

2024-09-13 冯诺依曼体系结构 OS管理 进程

一、冯诺依曼体系结构 1. 外部设备(外设): 分为输入设备和输出设备 输入设备:键盘、网卡、鼠标、网卡、磁盘(外存)、摄像头等 输出设备:显示器、磁盘、网卡、打印机等 2. 存储器 内存 3. 中…

Java面试篇基础部分-Java线程池工作原理

线程池的出现,主要是用来管理一组线程的工作运行状态,这样可以方便JVM更好的利用CPU资源。 Java线程池的工作原理:JVM先根据用户的参数创建一定数量的可运行的线程任务,并且将这些任务放入到队列中,在线程创建之后,启动这些任务。 如果当线程数超过最大线程数,这个线程数…

软件卸载工具(windows系统)-geek

有时候软件卸载会很麻烦,使用geek会比较方便。但是针对一些特别大的软件,geek也好像会稍微费点劲(比如MATLAB2022A),不过针对一般常规软件的卸载,geek就可以有效地完全卸载了,使用方法也很简单,…

W34kn3ss

靶机下载地址 https://www.vulnhub.com/entry/w34kn3ss-1,270/ 靶机配置 主机发现 arp-scan -l 端口扫描 nmap -sV -A -T4 192.168.229.160 目录扫描 dirsearch -u "http://192.168.229.160" GETshell 80端口 http://192.168.229.160 这个页面表明&#xff0c…

代码随想录_刷题笔记_第二次

链表 — 环形链表 题目链接:142. 环形链表 II - 力扣(LeetCode) 题目要求: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点&#xff0c…

【Delphi】遍历容器中所有的 TControl 控件

在 Delphi 中,你可以通过递归或者直接遍历 TForm 上的所有控件(TControl)。TForm 继承自 TWinControl,它有一个 Controls 属性,可以用于访问包含的所有控件。这个属性是一个数组,存储的是当前窗体上所有的控…

monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)

monorepo 前言1、搭建空项目并配置pnpm-workspace.yamlpnpm initpnpm-workspace.yaml 2.配置packages测试文件配置相关内容 3.引入packages内容至公共package.json4.创建测试项目,并引入公共包结语 前言 有个项目要引入一个第三方库,但是第三方库下载下…

C++_类和对象(中篇)—— const成员函数、取地址运算符的重载

目录 三、类和对象(中) 6、取地址运算符重载 1、const成员函数 2、取地址运算符的重载 三、类和对象(中) 6、取地址运算符重载 1、const成员函数 将const修饰的成员函数称之为const成员函数,const修饰成员函数…

【网络安全的神秘世界】目录遍历漏洞

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 先来了解两个概念: 身份认证:验证用户或者系统身份的过程,确保他们所声明的身份是真实的…

UE 禁用运行模式下的引擎内置按键

找到对应引擎版本安装目录下的BaseInput.ini文件,打开并修改

YoloV8改进策略:BackBone改进|Swin Transformer赋能YoloV8,性能跃升的新篇章

摘要 在深度学习领域,目标检测作为计算机视觉的核心任务之一,其性能的提升始终吸引着研究者们的目光。近期,我们创新性地将Swin Transformer这一前沿的Transformer架构引入到YoloV8目标检测模型中,通过替换其原有的主干网络,实现了检测性能的显著提升,为YoloV8系列模型注…