LVGL(lv_slider滑动条)

文章目录

    • 一、`lv_slider` 是什么?
    • 二、创建一个滑块
      • 设置滑块的范围和初始值
    • 三、响应滑块事件
    • 四、设置样式
      • 示例:更改滑块颜色和滑块按钮样式
    • 五、纵向滑块(垂直方向)
    • 六、双滑块模式(范围选择)
    • 七、获取滑块的值
    • 八、综合示例
    • 九、与标签联动显示数值(进阶示例)
    • 十、总结


lv_slider 是 LVGL 中的滑块控件,功能类似于你在音量调节、电量调节、亮度调节、滚动条等常见 UI 中见到的滑动条。它是 lv_bar 的子类,因此具有所有 lv_bar 的特性,并额外提供了可拖动的指针(滑块)


一、lv_slider 是什么?

  • lv_bar 的子类,拥有进度条的全部功能。
  • 支持用户通过触控/鼠标拖动滑块改变数值
  • 支持单向进度、**区间进度(双滑块)**模式。
  • 可横向或纵向使用。

二、创建一个滑块

lv_obj_t *slider = lv_slider_create(lv_scr_act());  // 在当前屏幕创建滑块
lv_obj_set_width(slider, 200);                      // 设置宽度
lv_obj_center(slider);                              // 居中显示

设置滑块的范围和初始值

lv_slider_set_range(slider, 0, 100);                // 设置范围
lv_slider_set_value(slider, 40, LV_ANIM_OFF);       // 设置初始值(无动画)

三、响应滑块事件

用户拖动滑块时,你通常会监听 LV_EVENT_VALUE_CHANGED 事件获取当前值。

void slider_event_cb(lv_event_t *e)
{if(lv_event_get_code(e) == LV_EVENT_VALUE_CHANGED) {lv_obj_t *slider = lv_event_get_target(e);int val = lv_slider_get_value(slider);printf("滑块值: %d\n", val);}
}lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);

四、设置样式

lv_slider 有三个主要部分可以设置样式:

部位对应区域
LV_PART_MAIN背景槽(未填充的部分)
LV_PART_INDICATOR已填充区域(进度)
LV_PART_KNOB滑块按钮(可拖动的圆点)

示例:更改滑块颜色和滑块按钮样式

static lv_style_t style_knob;
lv_style_init(&style_knob);
lv_style_set_bg_color(&style_knob, lv_color_hex(0xff0000));
lv_style_set_radius(&style_knob, LV_RADIUS_CIRCLE);
lv_style_set_pad_all(&style_knob, 6); // 设置 knob 尺寸lv_obj_add_style(slider, &style_knob, LV_PART_KNOB);

五、纵向滑块(垂直方向)

默认是横向滑动。你可以通过设置尺寸为“瘦高”来做纵向滑动条:

lv_obj_set_size(slider, 20, 150); // 瘦长样式

六、双滑块模式(范围选择)

LVGL 支持范围滑块(类似 A 点到 B 点的选区),需要启用 LV_USE_SLIDER && LV_SLIDER_RANGE

lv_slider_set_mode(slider, LV_SLIDER_MODE_RANGE);     // 启用范围模式
lv_slider_set_value(slider, 40, LV_ANIM_OFF);         // 设置右侧滑块值
lv_slider_set_left_value(slider, 20, LV_ANIM_OFF);    // 设置左侧滑块值

范围滑块适合做“区间选择”,比如设置温度上下限。


七、获取滑块的值

int val = lv_slider_get_value(slider);            // 当前滑块值
int left = lv_slider_get_left_value(slider);      // 左侧滑块值(仅范围模式下)

八、综合示例

void create_slider(void)
{lv_obj_t *slider = lv_slider_create(lv_scr_act());lv_obj_set_width(slider, 200);lv_obj_center(slider);lv_slider_set_range(slider, 0, 100);lv_slider_set_value(slider, 50, LV_ANIM_OFF);lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
}

九、与标签联动显示数值(进阶示例)

static lv_obj_t *label;void slider_event_cb(lv_event_t *e)
{lv_obj_t *slider = lv_event_get_target(e);int val = lv_slider_get_value(slider);char buf[16];lv_snprintf(buf, sizeof(buf), "%d%%", val);lv_label_set_text(label, buf);
}void create_slider_with_label(void)
{lv_obj_t *slider = lv_slider_create(lv_scr_act());lv_obj_set_width(slider, 200);lv_obj_align(slider, LV_ALIGN_CENTER, 0, -20);lv_slider_set_range(slider, 0, 100);lv_slider_set_value(slider, 30, LV_ANIM_OFF);lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);label = lv_label_create(lv_scr_act());lv_label_set_text(label, "30%");lv_obj_align(label, LV_ALIGN_CENTER, 0, 30);
}

十、总结

功能API 示例
创建滑块lv_slider_create()
设置范围lv_slider_set_range(slider, min, max)
设置值lv_slider_set_value(slider, val, anim)
获取当前值lv_slider_get_value(slider)
启用范围选择模式lv_slider_set_mode(slider, LV_SLIDER_MODE_RANGE)
设置左滑块值lv_slider_set_left_value(slider, val, anim)
设置样式lv_obj_add_style(slider, &style, part)

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

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

相关文章

每日算法-250511

每日算法 - 250511 记录一下今天刷的几道LeetCode题目,主要是关于贪心算法和数组处理。 1221. 分割平衡字符串 题目 思路 贪心 解题过程 我们可以遍历一次字符串,维护一个计数器 balance。当遇到字符 L 时,balance 增加;当遇…

Keepalived + LVS + Nginx 实现高可用 + 负载均衡

目录 Keepalived Keepalived 是什么(高可用) 安装 Keepalived LVS LVS 是什么(负载均衡) 安装 LVS Keepalived LVS Nginx 实现 高可用 负载均衡 Keepalived Keepalived 是什么(高可用) Keepaliv…

【杂谈】-DeepSeek-GRM:让AI更高效、更普及的先进技术

DeepSeek-GRM:让AI更高效、更普及的先进技术 文章目录 DeepSeek-GRM:让AI更高效、更普及的先进技术1、DeepSeek-GRM:先进的AI框架解析2、DeepSeek-GRM:AI开发的变革之力3、DeepSeek-GRM:广泛的应用前景4、企业自动化解…

【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

【FreeRTOS】基于G431+Cubemx自用笔记

系列文章目录 留空 文章目录 系列文章目录前言一、从头开始创建一个FreeRTOS工程1.1 在 "Timebase Source" 中,选择其他TIM1.2 配置FreeRTOS的参数1. 3 添加任务 二、动态任务的创建/删除2.1 函数介绍2.1.1 创建动态任务xTaskCreate()2.1.2 创建静态任务…

LVGL(lv_bar进度条)

文章目录 一、lv_bar 是什么?二、基本使用创建一个进度条设置进度值 三、条形方向与填充方向四、范围模式(Range)五、事件处理(可选)六、自定义样式(可选)七、综合示例八、配合 lv_timer 或外部…

AI对话小技巧

角色设定:擅于使用 System 给 GPT 设定角色和任务,如“哲学大师"指令注入:在 System 中注入常驻任务指令,如“主题创作"问题拆解:将复杂问题拆解成的子问题,分步骤执行,如&#xff1a…

C++ 核心基础:数字、数组、字符串、指针与引用详解

C++ 核心基础:数字、数组、字符串、指针与引用详解 1. C++ 基础语法1.1 标识符与保留字1.2 数据类型概述1.3 基本输入输出2.1 基本整数类型(int、short、long、long long)2.2 无符号整数类型(unsigned int、unsigned short、unsigned long、unsigned long long)2.3 整数类…

HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

前言 在开发运动类应用时,集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK,实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先,需要在项目的文…

如何理解k8s中的controller

一、基本概念 在k8s中,Controller(控制器)是核心组件之一,其负责维护集群状态并确保集群内的实际状态与期望状态一致的一类组件。控制器通过观察集群的当前状态并将其与用户定义的期望状态进行对比,做出相应的调整来实…

《Go小技巧易错点100例》第三十二篇

本期分享: 1.sync.Map的原理和使用方式 2.实现有序的Map sync.Map的原理和使用方式 sync.Map的底层结构是通过读写分离和无锁读设计实现高并发安全: 1)双存储结构: 包含原子化的 read(只读缓存,无锁快…

【MySQL】行结构详解:InnoDb支持格式、如何存储、头信息区域、Null列表、变长字段以及与其他格式的对比

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

LabVIEW多通道并行数据存储系统

在工业自动化监测、航空航天测试、生物医学信号采集等领域,常常需要对多个传感器通道的数据进行同步采集,并根据后续分析需求以不同采样率保存特定通道组合。传统单线程数据存储方案难以满足实时性和资源利用效率的要求,因此设计一个高效的多…

【Linux系列】bash_profile 与 zshrc 的编辑与加载

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

针对Mkdocs部署到Githubpages加速访问速度的一些心得

加速网站访问的一些心得 在使用 MkDocs 构建网站时,为了提高访问速度,我们可以采取以下一些措施: 1. 优化图片 使用合适的图片格式,如 WebP、JPEG2000 等,减少图片文件大小,从而加快加载速度。 可以使用…

Mysql中切割字符串作为in的查询条件

问题:需要将一个字符串切割成数组作为in的查询条件,如: select * from table_1 where name in (select slit(names) from table_2 where id 3); names 返回的格式是’name1,name2,name3…,需要将name按照逗号切割作为in的查询条件&#xff1b…

云计算中的虚拟化:成本节省、可扩展性与灾难恢复的完美结合

云计算中虚拟化的 4 大优势 1. 成本效益 从本质上讲,虚拟化最大限度地减少了硬件蔓延。团队可以将多个虚拟机整合到单个物理主机上,而不是为每个工作负载部署单独的服务器。这大大减少了前期硬件投资和持续维护。 结果如何?更低的功耗、更低…

Linux : 多线程【线程概念】

Linux : 多线程【线程概念】 (一)线程概念线程是什么用户层的线程linux中PID与LWP的关系 (二) 进程地址空间页表(三) 线程总结线程的优点线程的缺点线程异常线程用途 (一)线程概念 线程是什么 在一个程序里的一个执行…

IDEA转战TREA AI IDE : springboot+maven+vue项目配置

一、trea下载安装 Trae官方网址: https://www.trae.com.cn/ Trae官方文档:https://docs.trae.com.cn/docs/what-is-trae?_langzh w3cschool: https://www.w3cschool.cn/traedocs/ai-settings.html 安装这里省略,正常安装即可。…

Java--图书管理系统(简易版)

目录 目录 前言 🔔1.library包 1.1 Book类 1.2 BookList类 🔔2.user包 2.1User类(父类) 2.2Admin(管理员) 2.3 NormalUser(普通用户) 🔔3.Operation包 🕐3.1 IOperation接口 🕑3.2ListOperation(查看操作)…