LVGL笔记(6)-电子相册使用手势切换图片(windows仿真)

这篇具有很好参考价值的文章主要介绍了LVGL笔记(6)-电子相册使用手势切换图片(windows仿真)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


今天看了一下lvgl的EVENT枚举,有一个事件 LV_EVENT_GESTURE 是响应手势滑屏的,就把电子相册的按键改为手势操作。
参考文章:
1.作者:weixin_46964996,文章: LVGL 的 LV_EVENT_GESTURE
2.我自己的文章: LVGL笔记(2)-电子相册(windows模拟和ESP32-S3)
先看看效果:

手势滑动相册

1.LV_EVENT_GESTURE事件的回调函数

这个lvgl的事件好像没什么可说的,直接上源码:

static void albumpage_gesture_cb(lv_event_t * e)
{
    lv_event_code_t event = lv_event_get_code(e);
    if(event == LV_EVENT_GESTURE) {
    	//	等待触屏释放
        lv_indev_wait_release(lv_indev_get_act());
        //	获取方向
        lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act());
        switch(dir){
        case LV_DIR_LEFT:
            imganmitoleft();        printf("to left\n");
            break;
        case LV_DIR_RIGHT:
            imganmitoright();        printf("to right\n");
            break;
        }
    }
}

方向的定义在头文件 《lvgl/src/misc/lv_area.h》 中:

enum {
    LV_DIR_NONE     = 0x00,
    LV_DIR_LEFT     = (1 << 0),
    LV_DIR_RIGHT    = (1 << 1),
    LV_DIR_TOP      = (1 << 2),
    LV_DIR_BOTTOM   = (1 << 3),
    LV_DIR_HOR      = LV_DIR_LEFT | LV_DIR_RIGHT,
    LV_DIR_VER      = LV_DIR_TOP | LV_DIR_BOTTOM,
    LV_DIR_ALL      = LV_DIR_HOR | LV_DIR_VER,
};

typedef uint8_t lv_dir_t;

在相册的界面中设置回调函数:


void ui_albumpage_screen_init(lv_obj_t *parent)
{
......
    lv_obj_add_event_cb(lv_scr_act(), albumpage_gesture_cb, LV_EVENT_GESTURE, NULL);
......
}    

2.较为完整的代码

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);
    }
}
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 albumpage_gesture_cb(lv_event_t * e)
{
    lv_event_code_t event = lv_event_get_code(e);
    if(event == LV_EVENT_GESTURE) {
        lv_indev_wait_release(lv_indev_get_act());
        lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act());
        switch(dir){
        case LV_DIR_LEFT:
            imganmitoleft();
        printf("to left\n");
            break;
        case LV_DIR_RIGHT:
            imganmitoright();
        printf("to right\n");
            break;
        }
    }
}
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);
    }
}
/ SCREENS 
void ui_albumpage_screen_init(lv_obj_t *parent)
{
    // 0.ui_albumpage
    ui_albumpage = lv_obj_create(parent);
    lv_obj_clear_flag(ui_albumpage, LV_OBJ_FLAG_SCROLLABLE);
    lv_obj_set_size(ui_albumpage, LV_HOR_RES, LV_VER_RES);       // 设置屏幕大小
    lv_obj_set_style_bg_color(ui_albumpage, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_albumpage, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
		lv_obj_set_style_border_width(ui_albumpage,0,LV_STATE_DEFAULT);
    lv_obj_center(ui_albumpage);

    // 1.ui_Image1
    ui_Image1 = lv_img_create(ui_albumpage);
	lv_obj_set_style_border_width(ui_Image1,0,LV_STATE_DEFAULT);
    lv_obj_set_width(ui_Image1, 800);
    lv_obj_set_height(ui_Image1, 480);
    lv_obj_set_x(ui_Image1, 0);    
    lv_obj_set_y(ui_Image1, 0);
    lv_obj_set_align(ui_Image1, LV_ALIGN_CENTER);
    lv_obj_add_flag(ui_Image1, LV_OBJ_FLAG_ADV_HITTEST);
    lv_obj_clear_flag(ui_Image1, LV_OBJ_FLAG_SCROLLABLE);
    lv_obj_add_event_cb(lv_scr_act(), albumpage_gesture_cb, LV_EVENT_GESTURE, NULL);

    // 2.ui_btnswitch
    ui_btnswitch = lv_btn_create(ui_albumpage);
    lv_obj_set_width(ui_btnswitch, 80);
    lv_obj_set_height(ui_btnswitch,40);
		lv_obj_align(ui_btnswitch,LV_ALIGN_BOTTOM_MID,0,0);

    lv_obj_add_flag(ui_btnswitch, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
    lv_obj_clear_flag(ui_btnswitch, LV_OBJ_FLAG_SCROLLABLE);
    lv_obj_add_event_cb(ui_btnswitch, ui_event_btnswitch, LV_EVENT_ALL, NULL);
    lv_obj_set_style_radius(ui_btnswitch, 40, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_color(ui_btnswitch, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_btnswitch, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(ui_btnswitch, 40, LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_bg_color(ui_btnswitch, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_bg_opa(ui_btnswitch, 50, LV_PART_MAIN | LV_STATE_PRESSED);
		lv_obj_set_style_shadow_width(ui_btnswitch,0,LV_PART_MAIN | LV_STATE_DEFAULT);
		
    // 3.ui_Labbtnswitch
    ui_Labbtnswitch = lv_label_create(ui_btnswitch);
    lv_obj_set_width(ui_Labbtnswitch, LV_SIZE_CONTENT);
    lv_obj_set_height(ui_Labbtnswitch, LV_SIZE_CONTENT);
    lv_obj_set_x(ui_Labbtnswitch, 0);
    lv_obj_set_y(ui_Labbtnswitch, 0);
    lv_obj_set_align(ui_Labbtnswitch, LV_ALIGN_CENTER);
    lv_label_set_text(ui_Labbtnswitch, "exit");
}

3.工程源码

【测试代码完整工程】是在韦东山老师的开源工程上改动的。文章来源地址https://www.toymoban.com/news/detail-669626.html

到了这里,关于LVGL笔记(6)-电子相册使用手势切换图片(windows仿真)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 粤嵌Linux GEC6818开发板实现电子相册

    最近学校要求使用粤嵌的开发板实现电子相册,具体的功能要有点击特定的区域实现上一张、下一张、自动播放图片、黑屏退出应用程序、左右滑动切换图片相关功能。其中涉及到的知识点也比较多(文件IO、内存映射、触摸屏、bmp图片格式、进程、线程创建和同步、字符串

    2024年02月04日
    浏览(53)
  • 干货|小白也能自制电子相册赶紧码住~

    你是否想拥有一个独一无二的电子相册,却又苦于不知道如何下手?今天教你一个简单的方法,即使你是小白,也能轻松自制电子相册! 一、选择合适的工具 首先,你需要选择一个合适的工具来制作电子相册。有很多工具可供选择,包括手机APP、在线制作网站等。推荐大家

    2024年02月07日
    浏览(38)
  • 原地封神!一个只用套模板即可制作电子相册的网站

    对于忙碌的年轻人来说,一键操作的模板意味着无需复杂的操作步骤,就能轻松制作出精美的电子相册。 但是一个好的工具也是事关重要,最近发现了一款非常适合年轻人的模板--- FLBOOK在线制作电子杂志平台 ,只需要找到合适的模板即可制作电子相册 1.打开FLBOOK在线制作电

    2024年02月06日
    浏览(50)
  • Project_电子相册&音乐播放器&环境检测系统

    上一张 下一张 随机一张 循环播放 退出循环播放 滑动实现相片的切换 1. 上一张 2. 下一张 3. 随机一张 4. 循环播放 5. 退出循环播放 6. 滑动实现相片的切换 ​ 现在已经将基本功能全部做好了,但是我觉得代码还可以进一步优化,但是实习事件已经快结束了,并没有进一步优化

    2024年02月11日
    浏览(80)
  • 基于粤嵌gec6818开发板嵌入式开发电子相册,音乐播放,视频播放,2048游戏

    实现功能:本系统需要使用粤嵌的GEC-6818开发板设计一款娱乐影音系统,其中包括图片显示(相册)、音乐播放、视频播放,游戏四个部分,在每个部分内部,具有操控各个部分的功能触摸按键。本系统还应具有蓝牙远程操控功能。 具体要求:对使用者具有良好的可视交互体

    2024年02月13日
    浏览(71)
  • springboot+vue智能化网络电子相册图片管理系统_84ds3

    随着计算机技术发展,计算机系统的应用已延伸到社会的各个领域,大量基于网络的广泛应用给生活带来了十分的便利。所以把智能化电子相册与现在网络相结合,利用计算机搭建智能化电子相册系统,实现智能化电子相册的信息化。则对于进一步提高智能化电子相册发展,

    2024年02月13日
    浏览(42)
  • 基于Java电子相册图片分享网站系统设计与实现(Springboot框架)毕业设计论文提纲参考

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。 项目配有对应开发文档、

    2024年02月19日
    浏览(69)
  • 基于Java(SpringBoot框架)毕业设计作品成品(17)电子相册、摄影图片分享管理系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(55)
  • 【LVGL学习笔记】(三)控件使用

    LVGL全程LittleVGL,是一个轻量化的,开源的,用于嵌入式GUI设计的图形库。并且配合LVGL模拟器,可以在电脑对界面进行编辑显示,测试通过后再移植进嵌入式设备中,实现高效的项目开发。 LVGL中文教程手册:极客笔记之LVGL教程 特点 弧的0度在右边,90度在下边 效果图 源码

    2024年02月03日
    浏览(45)
  • 【esp32&lvgl】-2.6 #lvgl-多页面(screen)设定/切换

    目录 一、前言 二、实现原理 2.1 各个screen的定义及初始化 2.2 各个screen内的内容绘制 2.3 页面切换的events_handler 三、代码实现 3.1 PageManage库 3.2 Page_mainMenu库(界面) 3.3 Page_wifi库(界面) 参考文献         利用lvgl框架绘制GUI免不了需要实现多个页面的切换,毕竟把所有功

    2024年02月02日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包