当前位置: 首页 > news >正文

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

文章目录

  • 1.LV_EVENT_GESTURE事件的回调函数
  • 2.较为完整的代码
  • 3.工程源码

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

手势滑动相册

1.LV_EVENT_GESTURE事件的回调函数

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

staticvoidalbumpage_gesture_cb(lv_event_t*e){lv_event_code_tevent=lv_event_get_code(e);if(event==LV_EVENT_GESTURE){// 等待触屏释放lv_indev_wait_release(lv_indev_get_act());// 获取方向lv_dir_tdir=lv_indev_get_gesture_dir(lv_indev_get_act());switch(dir){caseLV_DIR_LEFT:imganmitoleft();printf("to left\n");break;caseLV_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,};typedefuint8_tlv_dir_t;

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

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

2.较为完整的代码

voidimganmitoright(){// 如果不是最后一个,指向下一个指针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);}}voidimganmitoleft(){// 如果不是第一个,指向上一个指针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);}}staticvoidalbumpage_gesture_cb(lv_event_t*e){lv_event_code_tevent=lv_event_get_code(e);if(event==LV_EVENT_GESTURE){lv_indev_wait_release(lv_indev_get_act());lv_dir_tdir=lv_indev_get_gesture_dir(lv_indev_get_act());switch(dir){caseLV_DIR_LEFT:imganmitoleft();printf("to left\n");break;caseLV_DIR_RIGHT:imganmitoright();printf("to right\n");break;}}}staticvoidui_event_btnswitch(lv_event_t*e){lv_event_code_tevent=lv_event_get_code(e);lv_obj_t*ta=lv_event_get_target(e);if(event==LV_EVENT_CLICKED){externlv_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 ////////////////////voidui_albumpage_screen_init(lv_obj_t*parent){// 0.ui_albumpageui_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_Image1ui_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_btnswitchui_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_Labbtnswitchui_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.工程源码

【测试代码完整工程】是在韦东山老师的开源工程上改动的。

http://www.cnnetsun.cn/news/3401027.html

相关文章:

  • 签约“百城千园行”,格创东智加速打造绿色低碳智慧园区
  • Windows 11界面改造利器:ExplorerPatcher让经典操作体验回归
  • 如何永久保存微信聊天记录:从数字碎片到个人记忆库的完整指南
  • BP神经网络预测matlab代码讲解与实现步骤
  • 炉石传说脚本:7倍效率提升的智能游戏助手终极指南
  • 终极解决方案:3分钟搞定Windows防休眠烦恼
  • 抖音直播弹幕实时抓取:5分钟掌握DouyinBarrageGrab完整使用指南
  • 树莓派5+Hailo AI Hat部署自定义YOLO模型实战
  • FPD-Link III解串器DS90UB940N-Q1:汽车高速视频传输与MIPI CSI-2接口实战
  • 时间敏感网络TSN—帧抢占技术的实现原理与帧格式解析
  • 重新定义3D打印体验:深度解析Cura版本升级的技术演进之路
  • 硬件电路设计--运算放大器(三)应用二:从基础单元到信号调理实战
  • NiceFish数据可视化:ECharts图表组件在Angular项目中的集成指南
  • 从Protel到Altium Designer:EDA工具演变与升级指南
  • 终极指南:如何用Citra模拟器在电脑上流畅运行3DS游戏
  • Cura配置文件迁移与版本升级完整教程:解决3D打印切片软件配置兼容性问题
  • 终极指南:Citra模拟器快速上手与性能优化完全手册
  • 从入门到精通:实战使用memtest_vulkan高效检测GPU显存稳定性
  • 3步构建您的个性化桌面伙伴:开源虚拟伴侣完全指南
  • STM32晶振电路设计:从增益裕量计算到PCB布局实战
  • 2.5平方电线选购指南:软线与硬线对比及诺娜品牌实测
  • ArcGIS面要素最小边界几何:从凸包到包络矩形的参数详解与应用场景
  • MT48LC16M16A2P-6A IT:G参数规格:256Mb/166MHz/工业级/TSOP-54 Micron SDRAM详细参数
  • 哔咔漫画下载器终极指南:三分钟打造你的个人永久漫画库
  • Windows Home Server 2011安装配置全攻略:家庭服务器搭建指南
  • MacBook电池寿命终极方案:Charge Limiter完整解析
  • 国内七家AI编程服务(Coding Plan)选型与工程落地指南
  • 【AI健身教练实战指南】:ChatGPT定制增肌计划的7大科学原则与3周落地模板
  • WeChatMsg终极指南:永久保存微信聊天记录,免费生成专业年度报告
  • 汽水音乐PC+手机版下载,免费听全网音乐!