LVGL笔记(2)

您所在的位置:网站首页 esp32蓝牙距离有多远 LVGL笔记(2)

LVGL笔记(2)

2023-05-16 14:13| 来源: 网络整理| 查看: 265

文章目录1.功能介绍2.切换界面2.1 切换到图片浏览界面2.2 切换到文件浏览界面3.生成图片文件名的双向链表4.切换图片5.工程源码6.移植到esp32-s3,480x800,4.3寸屏效果(软硬件开源)

本例子整合了韦山东老师的文件浏览器和网友的电子相册,实现可以浏览文件和浏览jpg图片的功能。

1.韦山东老师的文件浏览器,

gitee仓库;

2.网友的电子相册,

github仓库。

1.功能介绍

本例子实现了2个界面(文件浏览和图片浏览)的切换。一开始进入文件浏览,当点击到jpg文件时,隐藏文件浏览界面,显示jpg图片。图片浏览界面有左、中、右3个按键,中间键为退出,退出时隐藏图片浏览界面,显示文件浏览界面。

电子相册

2.切换界面

在 main 函数中,同时初始化2个界面,图片浏览界面设置为隐藏属性。

lv_100ask_file_explorer_simple_test(); ui_albumpage_screen_init(lv_scr_act()); lv_obj_add_flag(ui_albumpage, LV_OBJ_FLAG_HIDDEN);2.1 切换到图片浏览界面

在浏览文件过程中,如果点击的时图片名,就隐藏文件浏览界面,显示图片浏览界面。

static void file_explorer_simple_test_event_handler(lv_event_t * e) { ...... if((strcmp((sel_fn + (strlen(sel_fn) - 4)) , ".jpg") == 0) || (strcmp((sel_fn + (strlen(sel_fn) - 4)) , ".JPG") == 0)){ lv_obj_add_flag(file_explorer, LV_OBJ_FLAG_HIDDEN); // 隐藏文件浏览界面 lv_obj_clear_flag(ui_albumpage, LV_OBJ_FLAG_HIDDEN);// 显示图片界面,更新图片 sprintf(g_fullPath,"%s/%s",g_curPath,sel_fn); printf("fullPath:%s,total:%d",g_fullPath,imgs_total_nums); g_curImg_p = findImgListByName(sel_fn); lv_img_set_src(ui_Image1, g_fullPath); } } }2.2 切换到文件浏览界面

点击图片浏览界面的退出键,隐藏图片浏览界面,显示文件浏览界面。退出键的回调函数:

static void ui_event_btnswitch(lv_event_t *e) { lv_event_code_t event = lv_event_get_code(e); lv_obj_t * ta = lv_event_get_target(e); if(event == LV_EVENT_CLICKED) { extern lv_obj_t * file_explorer; // 隐藏图片浏览界面 lv_obj_add_flag(ui_albumpage, LV_OBJ_FLAG_HIDDEN); // 显示文件浏览界面 lv_obj_clear_flag(file_explorer, LV_OBJ_FLAG_HIDDEN); } }3.生成图片文件名的双向链表

进入文件夹时,会产生一个当前目录下的jpg文件名链表,这个链表的结构如下:

typedef struct { int index; // 在链表中的序号(索引),和图片总数结合,显示当前图片是第几张 char name[48-4]; }img_tag; typedef struct{ img_tag img_info; unsigned char * head; unsigned char * tail; }ll_jmg_t;

在遍历文件夹里面的内容时,把jpg文件加入链表中:

/*********************** *函数名:show_dir *描 述:显示当前目录下的文件夹及文件 * 附带功能:生成jpg文件列表 1.清空列表 2.初始化列表 3.逐项加入列表 4.产生当前目录和jpg文件数量的全局变量 ***********************/ static void show_dir(lv_obj_t * obj, char * path) { ...... // 识别并展示文件 if ((strcmp((fn + (strlen(fn) - 4)) , ".jpg") == 0) || (strcmp((fn + (strlen(fn) - 4)) , ".JPG") == 0) ) { lv_table_set_cell_value_fmt(explorer->file_list, index, 0, LV_SYMBOL_IMAGE " %s", fn); // 是文件,要把文件加入列表中 tempact = _lv_ll_ins_tail(&ll_test); memcpy(tempact->name,fn,strlen(fn)+1); imgs_total_nums++; tempact->index = imgs_total_nums; LV_LOG_USER("this is file:%s",fn); } ..... }4.切换图片

图片浏览界面的左右按键,回调函数如下:

LVGL笔记(2)-电子相册(windows模拟和ESP32-S3)_ui

static void ui_event_btnleft(lv_event_t * e) { lv_event_code_t event = lv_event_get_code(e); lv_obj_t * ta = lv_event_get_target(e); if(event == LV_EVENT_CLICKED) { imganmitoleft(); } } void imganmitoleft() { // 如果不是第一个,指向前一个指针 if(g_curImg_p->index > 1 ){ g_curImg_p = _lv_ll_get_prev(&ll_test, g_curImg_p); sprintf(g_fullPath,"%s/%s",g_curPath,g_curImg_p->name); printf(g_fullPath); lv_img_set_src(ui_Image1, g_fullPath); // 显示图片的总数和索引 sprintf(g_fullPath,"%d/%d,exit",g_curImg_p->index,imgs_total_nums); lv_label_set_text(ui_Labbtnswitch, g_fullPath); } }static void ui_event_btnright(lv_event_t * e) { lv_event_code_t event = lv_event_get_code(e); lv_obj_t * ta = lv_event_get_target(e); if(event == LV_EVENT_CLICKED) { imganmitoright(); } } void imganmitoright() { // 如果不是最后一个,指向后一个指针 if(g_curImg_p->index < imgs_total_nums ){ g_curImg_p = _lv_ll_get_next(&ll_test, g_curImg_p); sprintf(g_fullPath,"%s/%s",g_curPath,g_curImg_p->name); printf(g_fullPath); lv_img_set_src(ui_Image1, g_fullPath); // 显示图片的总数和索引 sprintf(g_fullPath,"%d/%d,exit",g_curImg_p->index,imgs_total_nums); lv_label_set_text(ui_Labbtnswitch, g_fullPath); } }5.工程源码

【测试代码工程】是在韦东山老师的开源工程上改动的。本例子在工程中的位置:

LVGL笔记(2)-电子相册(windows模拟和ESP32-S3)_图片浏览_02

6.移植到esp32-s3,480x800,4.3寸屏效果(软硬件开源)

esp电子相册-15

源码:gitee 硬件介绍:LVGL笔记(4)-PCB硬件:esp32-S3,并口8bit,4.3寸480x800LCD(FPC4301MS)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3