当前位置:网站首页>LVGL 7.11 tileview界面循环切换
LVGL 7.11 tileview界面循环切换
2022-07-25 16:16:00 【仙剑情缘】
定义变量
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,
};
定时器回调函数
tatic 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;
}
运行效果

边栏推荐
猜你喜欢

Upgrade esxi6.7.0 to 7.0u3f (updated on July 12, 2022)
![[image hiding] digital image watermarking method technology based on hybrid dwt-hd-svd with matlab code](/img/2a/b5214e9fa206f1872293c9b9d7bdb6.png)
[image hiding] digital image watermarking method technology based on hybrid dwt-hd-svd with matlab code

How does win11's own drawing software display the ruler?

Boomi荣获“多元化最佳首席执行官奖”和“职业成长最佳公司奖”,在大型公司类别中跻身50强

推荐收藏,这或许是最全的类别型特征的编码方法总结

从业务需求出发,开启IDC高效运维之路

Win11动态磁贴没了?Win11中恢复动态磁贴的方法

电阻电路的等效变化(Ⅱ)

Cookie、cookie与session区别
![Leetcode:528. select randomly according to the weight [ordinary random failure + prefix and dichotomy]](/img/fb/8178388f8c9ac80d95140378d24238.png)
Leetcode:528. select randomly according to the weight [ordinary random failure + prefix and dichotomy]
随机推荐
Solve win10 disk occupation of 100%
使用Huggingface在矩池云快速加载预训练模型和数据集
Leetcode:6127. Number of high-quality number pairs [bit operation finding rules + the sum of two numbers is greater than or equal to K + dichotomy]
【图像去噪】基于双立方插值和稀疏表示实现图像去噪matlab源码
doGet与doPost
聊聊如何用 Redis 实现分布式锁?
2W word detailed data Lake: concept, characteristics, architecture and cases
02. Limit the parameter props to a list of types
Use huggingface to quickly load pre training models and datasets in moment pool cloud
Boomi荣获“多元化最佳首席执行官奖”和“职业成长最佳公司奖”,在大型公司类别中跻身50强
Exclusive lock
排他锁(EXclusive Lock)
进程之间的通信(管道详解)
Win11桌面切换快捷键是什么?Win11快速切换桌面的方法
Permission management - role assignment menu
MySQL 元数据锁(MDL)
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
EMQX Cloud 更新:日志分析增加更多参数,监控运维更省心
开发者如何为React Native选择合适的数据库
哪个led显示屏厂家更好