欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > LVGL(lv_roller滚轮选择器)

LVGL(lv_roller滚轮选择器)

2026/5/2 19:44:29 来源:https://blog.csdn.net/m0_49476241/article/details/148023898  浏览:    关键词:LVGL(lv_roller滚轮选择器)

文章目录

  • 🎡 `lv_roller` 组件详解:LVGL 的滚轮选择器
    • 🧱 一、基本用法
      • ✅ 创建一个 `lv_roller`
    • 🔧 二、常用 API
    • 🎨 三、滚动模式详解
    • 🧰 四、设置可见行数
    • 📞 五、事件处理
    • 🌈 六、示例:创建一个时间选择器
    • 📌 总结
    • 🧠 小提示

🎡 lv_roller 组件详解:LVGL 的滚轮选择器

lv_roller 是 LVGL 中的滚动选择控件,非常适合用于需要从一组选项中选择一个条目的场景,比如设置界面中的时间选择、日期选择、语言选择等。它类似于移动设备上的“滚轮式选择器”。


🧱 一、基本用法

✅ 创建一个 lv_roller

lv_obj_t * roller = lv_roller_create(lv_scr_act());
lv_roller_set_options(roller,"Apple\n""Banana\n""Orange\n""Grape\n""Cherry",LV_ROLLER_MODE_NORMAL);
  • 创建对象
  • 设置选项(\n 分隔)
  • 选择滚动模式(NORMALINFINITE

🔧 二、常用 API

函数说明
lv_roller_set_options()设置选项,\n 分隔
lv_roller_set_selected()设置当前选中项索引
lv_roller_get_selected()获取当前选中项索引
lv_roller_get_selected_str()获取当前选中项字符串
lv_roller_set_visible_row_count()设置显示的行数(默认 3)
lv_roller_set_mode()设置滚动模式(正常/循环)

🎨 三、滚动模式详解

lv_roller_set_mode(roller, LV_ROLLER_MODE_NORMAL);   // 滚到顶/底就停下
lv_roller_set_mode(roller, LV_ROLLER_MODE_INFINITE); // 无限循环滚动
  • NORMAL 模式适合有限选项(如设置温度)
  • INFINITE 模式更适合时间/日期滚轮

🧰 四、设置可见行数

lv_roller_set_visible_row_count(roller, 4);
  • 设置“窗口”中同时可见的选项行数
  • 建议奇数值(中间选项会居中)

📞 五、事件处理

当用户选择某项时会触发 LV_EVENT_VALUE_CHANGED

void roller_event_cb(lv_event_t * e)
{lv_obj_t * obj = lv_event_get_target(e);char buf[32];lv_roller_get_selected_str(obj, buf, sizeof(buf));LV_LOG_USER("选中项: %s", buf);
}lv_obj_add_event_cb(roller, roller_event_cb, LV_EVENT_VALUE_CHANGED, NULL);

🌈 六、示例:创建一个时间选择器

lv_obj_t * roller_hour = lv_roller_create(lv_scr_act());
lv_roller_set_options(roller_hour,"00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23",LV_ROLLER_MODE_INFINITE);
lv_roller_set_visible_row_count(roller_hour, 5);
lv_obj_align(roller_hour, LV_ALIGN_CENTER, -60, 0);lv_obj_t * roller_min = lv_roller_create(lv_scr_act());
lv_roller_set_options(roller_min,"00\n05\n10\n15\n20\n25\n30\n35\n40\n45\n50\n55",LV_ROLLER_MODE_INFINITE);
lv_roller_set_visible_row_count(roller_min, 5);
lv_obj_align(roller_min, LV_ALIGN_CENTER, 60, 0);

✅ 一个简单的时钟选择器就完成了!


📌 总结

功能函数
设置选项lv_roller_set_options()
设置模式lv_roller_set_mode()
获取选项索引lv_roller_get_selected()
获取选项文本lv_roller_get_selected_str()
设置显示行数lv_roller_set_visible_row_count()
添加事件回调lv_obj_add_event_cb()

🧠 小提示

  • 滚轮行数不宜太多,建议 3~7 行为佳
  • INFINITE 模式滚动流畅,体验更现代
  • 可配合样式美化实现高仿 iOS 选择器

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词