1 背景介绍
1.1 背景介绍
lv_tileview 是 LVGL 提供的一个特殊容器控件,用于创建一个可通过滑动手势或动画切换的多页面视图。它将多个“子页面”排列在一个二维网格中,用户可以通过上下左右滑动在这些页面间切换,就像手机主屏滑动切换桌面页面一样。
1.2 基本概念
- tileview 是一个容器对象,可以添加多个 “tile”(瓷砖/页面)。
- 每个 tile 是一个标准的 lv_obj_t,你可以往里面添加按钮、图表、图像等子控件。
- tileview 支持方向控制(例如只允许左右滑动,或上下左右都允许)。
- 页面会以滑动吸附的方式进行切换,不会卡在中间。
1.3 应用场景
-
主页分页 / 主屏切换
类似 Android 桌面左右滑动切换多个主屏,每个 tile 显示不同的功能或快捷入口。 -
数据仪表盘
每页一个仪表界面,如温度、湿度、电量等,适合工业设备、物联网面板(HMI)。 -
图片 / 相册浏览器
每个 tile 显示一张图片,用户通过滑动浏览相册或图像列表。 -
多页设置菜单
每个 tile 是一个设置分类页面(如 WiFi、亮度、声音等),支持触摸滑动切换,用户体验好。 -
导航类界面
比如地图软件,或某些路径控制界面;每页对应一个功能或子模块。 -
数字输入或多种键盘布局
一个 tile 是数字键盘,另一个 tile 是字母键盘。滑动切换不同输入方式。
1.4 注意事项
-
lv_tileview 是基于滚动容器构建的,所以不能嵌套在另一个滚动容器中。
-
每个 tile 是一个独立的容器对象,可以像普通控件一样操作。
-
页面较多时建议控制每页内容复杂度,避免内存压力。
-
若要实现滑动后执行某些操作,可监听 LV_EVENT_SCROLL_END 事件
2 主要函数介绍
2.1 创建 tileview
这将在当前屏幕上创建一个 tileview 对象。
lv_obj_t * tv = lv_tileview_create(lv_scr_act());
2.2 添加 tile 页面
lv_obj_t * tile = lv_tileview_add_tile(tv, x, y, allowed_dirs);
x 和 y 是 tile 的坐标(网格中位置)
allowed_dirs 表示从这个 tile 可以滑动到哪些方向,例如 LV_DIR_HOR | LV_DIR_VER
2.2.1 水平移动
lv_obj_t* tile1= lv_tileview_add_tile(tileview, 0, 0, LV_DIR_HOR ); // 第一个页面
// 添加内容
lv_obj_t* label = lv_label_create(tile1);
lv_label_set_text(label, "first page");
lv_obj_center(label);
lv_obj_t* tile2=lv_tileview_add_tile(tileview, 1, 0, LV_DIR_HOR ); // 第二个页面
// 添加内容
label = lv_label_create(tile2);
lv_label_set_text(label, "second page"<