定义变量
static const lv_point_t valid_pos2[] = { {0, 0}, {0, 1} ,{0,2},{0,3},{0,4}, {1,2} ,{2,2},{3,2} };
static int delay_cnt;
static int last_hor_pos;
#define VALID_POS_LEN sizeof(valid_pos2)/sizeof(valid_pos2[0])
typedef lv_obj_t* (*tileview_elem)(lv_obj_t* scr);
lv_obj_t* create_tileview_elem_00_03(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 0_3");
return btn;
}
lv_obj_t* create_tileview_elem_0_1(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 0_1");
return btn;
}
lv_obj_t* create_tileview_elem_0_2(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 0_2");
return btn;
}
lv_obj_t* create_tileview_elem_0_3(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 0_3");
return btn;
}
lv_obj_t* create_tileview_elem_04_01(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 0_1");
return btn;
}
lv_obj_t* create_tileview_elem_1_2(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 1_2");
return btn;
}
lv_obj_t* create_tileview_elem_2_2(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 2_2");
return btn;
}
lv_obj_t* create_tileview_elem_3_2(lv_obj_t* scr)
{
lv_obj_t* btn = lv_btn_create(scr, NULL);
lv_obj_align(btn, scr, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* label = lv_label_create(btn, NULL);
lv_label_set_text_fmt(label, "Button 3_2");
return btn;
}
const tileview_elem s_tileview[VALID_POS_LEN] = {
create_tileview_elem_00_03,
create_tileview_elem_0_1,
create_tileview_elem_0_2,
create_tileview_elem_0_3,
create_tileview_elem_04_01,
create_tileview_elem_1_2,
create_tileview_elem_2_2,
create_tileview_elem_3_2,
};
定时器回调函数
static void page_task(struct _lv_task_t* task)
{
if (lv_anim_count_running())
return;
lv_obj_t *obj = task->user_data;
if (delay_cnt)
{
if (--delay_cnt == 0) {
lv_coord_t x, y;
lv_tileview_get_tile_act(obj, &x, &y);
if (x == 0 && y == 0) {
lv_tileview_set_tile_act(obj, 0, 3, LV_ANIM_OFF);
}
else
if (x == 0 && y == last_hor_pos) {
lv_tileview_set_tile_act(obj, 0, 1, LV_ANIM_OFF);
}
}
}
}
事件处理回调函数
void btn_handler(struct _lv_obj_t* obj, lv_event_t event)
{
LV_LOG_USER("--event %d", event);
if (event == LV_EVENT_PRESSING)
{
delay_cnt = 10;
}
}
创建tileview
lv_obj_t * init_main_tileview(void)
{
lv_obj_t* tv = lv_tileview_create(lv_scr_act(), NULL);
lv_obj_set_style_local_bg_opa(tv, LV_TILEVIEW_PART_SCROLLBAR, LV_STATE_DEFAULT, LV_OPA_TRANSP);
lv_obj_set_style_local_bg_opa(tv, LV_TILEVIEW_PART_BG, LV_STATE_DEFAULT, LV_OPA_TRANSP);
lv_tileview_set_valid_positions(tv, valid_pos2, VALID_POS_LEN);
lv_tileview_set_edge_flash(tv, true);
lv_obj_set_size(tv, LV_HOR_RES, LV_VER_RES);
lv_obj_set_pos(tv, 0, 0);
last_hor_pos = 0;
for (int i = 0; i < VALID_POS_LEN; i++)
{
if (valid_pos2[i].x == 0)
{
if (valid_pos2[i].y > last_hor_pos)
last_hor_pos = valid_pos2[i].y;
}
}
LV_LOG_USER("--last_hor_pos %d", last_hor_pos);
for (int i = 0; i < VALID_POS_LEN; i++) {
lv_obj_t* cont = s_tileview[i](tv);
lv_obj_set_size(cont, LV_HOR_RES, LV_HOR_RES);
lv_obj_set_pos(cont, valid_pos2[i].x* LV_HOR_RES, valid_pos2[i].y* LV_HOR_RES);
lv_tileview_add_element(tv, cont);
if (i == 1 || i == last_hor_pos-1)
{
lv_obj_set_event_cb(cont, btn_handler);
lv_obj_set_user_data(cont, tv);
}
}
lv_task_create(page_task, 10, LV_TASK_PRIO_LOW, tv);
lv_tileview_set_tile_act(tv, 0, 2, LV_ANIM_OFF);
return tv;
}
运行效果