平铺视图(lv_tileview)¶
概述¶
平铺视图(Tileview)是一个容器对象,其中的元素(称为图块)可以以网格形式排列。通过滑动,用户可以在图块之间导航。
如果Tileview是屏幕尺寸的,它将提供可能已经在智能手表上看到的用户界面。
零件和样式¶
Tileview与 页面(lv_page) 具有相同的部分。期望 LV_PAGE_PART_SCRL
,因为它不能被引用并且始终是透明的。请参阅该页面的详细文档。
用法¶
有效区域¶
磁贴不必在每个元素都存在的地方形成完整的网格。网格中可以有孔,但必须是连续的,即不能有空的行或列。
使用 lv_tileview_set_valid_positions(tileview, valid_pos_array, array_len)
可以设置有效位置。仅可以滚动到该位置。 0,0
索引表示左上方的图块。
例如。 lv_point_t valid_pos_array[] = {{0,0}, {0,1}, {1,1}, {{LV_COORD_MIN, LV_COORD_MIN}}
给出了 “L” 形的图块视图。它指示 {1,1}
中没有图块,因此用户无法在此处滚动。
换句话说, valid_pos_array
告诉磁贴在哪里。可以即时更改它以禁用特定图块上的某些位置。
例如,可能存在一个2x2网格,其中添加了所有图块,但第一行(y = 0)作为“主行”,第二行(y = 1)包含其上方图块的选项。
假设水平滚动只能在主行中进行,而在第二行中的选项之间则不可能进行。在这种情况下, valid_pos_array
需要改变时,选择一个新的主瓦:
对于第一个主磁贴:
{0,0},{0,1},{1,0}
以禁用{1,1}
选项磁贴对于第二个主磁贴:
{0,0},{1,0},{1,1}
以禁用{0,1}
选项磁贴
设置瓷砖¶
设置当前可见的图块使用: lv_tileview_set_tile_act(tileview, x_id, y_id, LV_ANIM_ON/OFF)
添加元素¶
要添加元素,只需在Tileview上创建一个对象并将其手动定位到所需位置即可。
lv_tileview_add_element(tielview, element)
应该用来使Tileview滚动(拖动)其元素一个。例如,如果图块上有一个按钮,则需要将该按钮显式添加到Tileview中,以使用户也可以使用该按钮滚动Tileview。
滚动传播¶
页面状对象(如 列表(lv_list)
)的滚动传播功能在这里可以很好地使用。例如,可以有一个完整的 列表(lv_list)
,当列表到达最顶部或最底部时,用户将改为滚动图块视图。
动画时间¶
平铺视图的动画时间可以使用 lv_tileview_set_anim_time(tileview, anim_time)
进行调整。
在以下情况下应用动画
使用
lv_tileview_set_tile_act
选择一个新图块当前磁贴稍微滚动然后释放(还原原始标题)
当前磁贴滚动超过一半大小,然后释放(移至下一个磁贴)
边缘闪光¶
当滚动到达的图块视图击中无效位置或图块视图的末尾时,可以添加 “边缘闪光” 效果。
使用 lv_tileview_set_edge_flash(tileview, true)
启用此功能。
事件¶
**LV_EVENT_VALUE_CHANGED ** 当加载了带有滚动或
lv_tileview_set_act
的新图块时发送。将事件数据设置为valid_pos_array
中新图块的索引(其类型为uint32_t *
)
了解有关 事件 的更多内容。
范例¶
包含内容的平铺视图¶
上述效果的示例代码:
1 #include "../../../lv_examples.h"
2 #if LV_USE_TILEVIEW
3
4 void lv_ex_tileview_1(void)
5 {
6 static lv_point_t valid_pos[] = {{0,0}, {0, 1}, {1,1}};
7 lv_obj_t *tileview;
8 tileview = lv_tileview_create(lv_scr_act(), NULL);
9 lv_tileview_set_valid_positions(tileview, valid_pos, 3);
10 lv_tileview_set_edge_flash(tileview, true);
11
12 lv_obj_t * tile1 = lv_obj_create(tileview, NULL);
13 lv_obj_set_size(tile1, LV_HOR_RES, LV_VER_RES);
14 lv_tileview_add_element(tileview, tile1);
15
16 /*Tile1: just a label*/
17 lv_obj_t * label = lv_label_create(tile1, NULL);
18 lv_label_set_text(label, "Scroll down");
19 lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);
20
21 /*Tile2: a list*/
22 lv_obj_t * list = lv_list_create(tileview, NULL);
23 lv_obj_set_size(list, LV_HOR_RES, LV_VER_RES);
24 lv_obj_set_pos(list, 0, LV_VER_RES);
25 lv_list_set_scroll_propagation(list, true);
26 lv_list_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF);
27
28 lv_list_add_btn(list, NULL, "One");
29 lv_list_add_btn(list, NULL, "Two");
30 lv_list_add_btn(list, NULL, "Three");
31 lv_list_add_btn(list, NULL, "Four");
32 lv_list_add_btn(list, NULL, "Five");
33 lv_list_add_btn(list, NULL, "Six");
34 lv_list_add_btn(list, NULL, "Seven");
35 lv_list_add_btn(list, NULL, "Eight");
36
37 /*Tile3: a button*/
38 lv_obj_t * tile3 = lv_obj_create(tileview, tile1);
39 lv_obj_set_pos(tile3, LV_HOR_RES, LV_VER_RES);
40 lv_tileview_add_element(tileview, tile3);
41
42 lv_obj_t * btn = lv_btn_create(tile3, NULL);
43 lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, 0);
44 lv_tileview_add_element(tileview, btn);
45 label = lv_label_create(btn, NULL);
46 lv_label_set_text(label, "No scroll up");
47 }
48
49 #endif
相关API¶
TODO