位置: IT常识 - 正文

LVGL V8应用——通过按键切换页面(lvgl使用)

编辑:rootadmin
LVGL V8应用——通过按键切换页面 一、按键切换对象程序

推荐整理分享LVGL V8应用——通过按键切换页面(lvgl使用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:lvgl使用,lvw8,lve8,lv应用程序,lvgl使用,lvw8,lvw8,lvr8,内容如对您有帮助,希望把文章链接给更多的朋友!

全局变量

static lv_obj_t *contanier1= NULL;static lv_obj_t *contanier2= NULL;

按钮对应回调函数,实现容器的切换

static void win_btn_event_callback1(lv_event_t* e){ lv_event_code_t code = lv_event_get_code(e); if (code == LV_EVENT_CLICKED) { // 给窗口1的容器添加隐藏属性,清除窗口2的隐藏属性 lv_obj_add_flag(contanier1, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(contanier2, LV_OBJ_FLAG_HIDDEN); }}static void win_btn_event_callback2(lv_event_t* e){ lv_event_code_t code = lv_event_get_code(e); if (code == LV_EVENT_CLICKED) { // 给窗口2的容器添加隐藏属性,清除窗口1的隐藏属性 lv_obj_add_flag(contanier2, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(contanier1, LV_OBJ_FLAG_HIDDEN); }}

创建容器contanier1和contanier2

void cont1(lv_obj_t *page){ static lv_style_t obj_style; lv_style_reset(&obj_style); lv_style_init(&obj_style); // 初始化按钮样式 lv_style_set_radius(&obj_style, 0); // 设置样式圆角弧度 contanier1= lv_obj_create(page); // 基于屏幕创建一个和屏幕大小一样的容器win1_contanier if (contanier1!= NULL) { lv_obj_set_style_bg_color(contanier1, lv_palette_main(LV_PALETTE_RED), 0); lv_obj_align(contanier1,LV_ALIGN_TOP_MID,0,0); lv_obj_set_size(contanier1, 280, 100); lv_obj_add_style(contanier1, &obj_style, 0); lv_obj_t * label = lv_label_create(contanier1); lv_label_set_text(label, "Cont1"); // 设置标签文本 lv_obj_t * btn = lv_btn_create(contanier1); if (btn != NULL) { lv_obj_set_size(btn, 60, 40); lv_obj_align(btn,LV_ALIGN_BOTTOM_RIGHT,0,0); lv_obj_add_event_cb(btn, win_btn_event_callback1, LV_EVENT_ALL, page); // 给对象添加CLICK事件和事件处理回调函数 lv_obj_t *label = lv_label_create(btn); // 给按钮添加标签 if (label != NULL) { lv_label_set_text(label, "Button1"); // 设置标签文本 lv_obj_center(label); // 标签居中显示 } } }}void cont2(lv_obj_t *page){ static lv_style_t obj_style; lv_style_reset(&obj_style); lv_style_init(&obj_style); // 初始化按钮样式 lv_style_set_radius(&obj_style, 0); // 设置样式圆角弧度 win2_contanier = lv_obj_create(page); // 基于屏幕创建一个和屏幕大小一样的容器win2_contanier if (contanier2 != NULL) { lv_obj_set_style_bg_color(contanier2 , lv_palette_main(LV_PALETTE_BLUE), 0); lv_obj_align(contanier2 ,LV_ALIGN_TOP_MID,0,0); lv_obj_set_size(contanier2 , 280, 100); lv_obj_add_style(contanier2 , &obj_style, 0); lv_obj_t * label = lv_label_create(contanier2 ); lv_label_set_text(label, "Cont2"); // 设置标签文本 lv_obj_t * btn = lv_btn_create(contanier2 ); if (btn != NULL) { lv_obj_set_size(btn, 60, 40); lv_obj_align(btn,LV_ALIGN_BOTTOM_RIGHT,0,0); lv_obj_add_event_cb(btn, win_btn_event_callback2, LV_EVENT_ALL, page); // 给对象添加CLICK事件和事件处理回调函数 lv_obj_set_style_bg_color(btn, lv_palette_main(LV_PALETTE_RED), 0); lv_obj_t *label = lv_label_create(btn); // 给按钮添加标签 if (label != NULL) { lv_label_set_text(label, "Button2"); // 设置标签文本 lv_obj_center(label); // 标签居中显示 } } }}

调用容器创建函数,并隐藏容器2

void main(void){ lv_obj_t * page = lv_obj_create(lv_scr_act()); lv_obj_set_size(page, LV_HOR_RES, LV_VER_RES); //设置到屏幕大小 label_refresh(page); cont1(page); cont2(page); lv_obj_add_flag(win2_contanier, LV_OBJ_FLAG_HIDDEN);}效果

按下按钮,只执行Cont1与Cont2之间的切换,其余部分不变

二、按键切换页面方法1:

通过LV_OBJ_FLAG_HIDDEN隐藏属性实现页面切换,来源

//win1按钮回调函数,按下之后隐藏win1,显示win2static void win_btn_event_callback1(lv_event_t* event){ lv_event_code_t code = lv_event_get_code(event); if (code == LV_EVENT_CLICKED) { // 给窗口1的容器添加隐藏属性,清除窗口2的隐藏属性 lv_obj_add_flag(win1_contanier, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(win2_contanier, LV_OBJ_FLAG_HIDDEN); }} //win2按钮回调函数,按下之后隐藏win2,显示win1static void win_btn_event_callback2(lv_event_t* event){ lv_event_code_t code = lv_event_get_code(event); if (code == LV_EVENT_CLICKED) { // 给窗口2的容器添加隐藏属性,清除窗口1的隐藏属性 lv_obj_add_flag(win2_contanier, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(win1_contanier, LV_OBJ_FLAG_HIDDEN); }}LVGL V8应用——通过按键切换页面(lvgl使用)

创建两个窗口,给其中一个窗口加上隐藏属性

void lv_win_switch_main(){ show_button_win1(); show_button_win2(); // 给窗口2的容器添加隐藏属性 lv_obj_add_flag(win2_contanier, LV_OBJ_FLAG_HIDDEN);方法2:

在回调函数中,创建新窗口并删除旧窗口

static void win_btn_event_callback1(lv_event_t* event){ lv_event_code_t code = lv_event_get_code(event); if (code == LV_EVENT_CLICKED) { // 删除窗口1的win1_contanier容器,这样就可以把win1_contanier上的子对象全部删除,然后显示窗口2 lv_obj_del(win1_contanier); show_button_win2(); }}static void win_btn_event_callback2(lv_event_t* event){ lv_event_code_t code = lv_event_get_code(event); if (code == LV_EVENT_CLICKED) { // 删除窗口2的win2_contanier容器,这样就可以把win2_contanier上的子对象全部删除,然后显示窗口1 lv_obj_del(win2_contanier); show_button_win1(); }}void lv_win_switch_main(){ show_button_win1();#endif方法3:

使用下面两个函数加载屏幕

直接加载该屏幕scr参数1:要加载的屏幕static inline void lv_scr_load(lv_obj_t * scr){ lv_disp_load_scr(scr);}通过动画的方式显示参数1:要加载的屏幕参数2:动画类别参数3:切换动画需要的时间参数4:为true时则会在切换界面后将旧界面删除,节约内存void lv_scr_load_anim(lv_obj_t * scr, lv_scr_load_anim_t anim_type, uint32_t time, uint32_t delay, bool auto_del);

动画类别: LV_SCR_LOAD_ANIM_NONE 在 delay 毫秒后立即切换 LV_SCR_LOAD_ANIM_OVER_LEFT/RIGHT/TOP/BOTTOM 将新屏幕按指定的方向移动 LV_SCR_LOAD_ANIM_MOVE_LEFT/RIGHT/TOP/BOTTOM 新屏幕和当前屏幕都按指定的方向移动 LV_SCR_LOAD_ANIM_FADE_ON 将新屏幕淡入旧屏幕

代码

创建页面1

lv_obj_t * one = lv_obj_create(lv_scr_act()); //在默认屏上创建obj对象 lv_obj_set_style_bg_color(one,lv_color_hex(0xeeffcc), LV_STATE_DEFAULT); // obj背景色设成黄色 lv_obj_set_size(one, LV_HOR_RES, LV_VER_RES); // 设置到屏幕大小

创建页面2

lv_obj_t * two = lv_obj_create(NULL); // 创建新屏幕但未加载到显示 lv_obj_set_style_bg_color(two,lv_color_hex(0x00d8db), LV_STATE_DEFAULT); // 背影色设成蓝色 lv_obj_set_size(two, LV_HOR_RES, LV_VER_RES); //设置到屏幕大小

从one创建按钮one_btn ,two创建按钮two_btn ,分别注册回调函数,传入用户自定义数据two,one

lv_obj_t* one_btn = lv_btn_create(one); lv_obj_align(one_btn, LV_ALIGN_TOP_MID, 0, 20); lv_obj_t* label = lv_label_create(one_btn); // 创建label lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); // label居屏幕中心对齐 lv_label_set_text(label, "ONE"); // label显示ONE lv_obj_add_event_cb(one_btn, one_btn_event_handler, LV_EVENT_CLICKED, two); lv_obj_t* two_btn = lv_btn_create(two); lv_obj_align(two_btn, LV_ALIGN_TOP_MID, 0, 20); label = lv_label_create(two_btn); // 创建label lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); // 居中对齐 lv_label_set_text(label, "TWO"); // label上显示TWO lv_obj_add_event_cb(two_btn, two_btn_event_handler, LV_EVENT_CLICKED, one);

当按钮按下时调用回调函数,获取用户自定义数据two,one,并切换到相应界面lv_scr_load_anim();

void one_btn_event_handler(lv_event_t *e){ lv_obj_t * two = lv_event_get_user_data(e);// 加载屏幕TWO,动画效果为LV_SCR_LOAD_ANIM_FADE_ON,切换时间为100ms,延迟0ms后从第一屏开始切换,切换完成后隐藏屏幕二 lv_scr_load_anim(two, LV_SCR_LOAD_ANIM_FADE_ON, 100, 0, false); }void two_btn_event_handler(lv_event_t *e){ lv_obj_t * one = lv_event_get_user_data(e);// 加载屏幕one,动画效果为LV_SCR_LOAD_ANIM_FADE_ON,切换时间为100ms,延迟0ms后从第二屏开始切换,切换完成后隐藏屏幕一 lv_scr_load_anim(one, LV_SCR_LOAD_ANIM_FADE_ON, 100, 0, false); }效果

按下按钮one切换到屏幕two

方法4:

在唯一画布上建立多个界面,每个界面大小都等于屏幕大小

本文链接地址:https://www.jiuchutong.com/zhishi/283867.html 转载请保留说明!

上一篇:一只草丛里的狐狸 (© Frederic Desmette/Minden Pictures)(一只草丛里的狐狸作文)

下一篇:nero.exe - nero是什么进程 有什么用(negro 什么意思)

  • 联通流量卡网速慢的解决办法(联通流量卡网速快吗)

    联通流量卡网速慢的解决办法(联通流量卡网速快吗)

  • 闲聊的钱怎么突然不见了(闲聊的钱怎么突然少了)

    闲聊的钱怎么突然不见了(闲聊的钱怎么突然少了)

  • html中空格代码是什么(html空格代码/n)

    html中空格代码是什么(html空格代码/n)

  • 小米note是什么接口(小米手机note系列怎么样)

    小米note是什么接口(小米手机note系列怎么样)

  • 神舟笔记本开机黑屏(神舟笔记本开机启动选项)

    神舟笔记本开机黑屏(神舟笔记本开机启动选项)

  • word的替换命令所在的选项卡是(word的替换命令所在)

    word的替换命令所在的选项卡是(word的替换命令所在)

  • 直播间被移除是拉黑吗(直播间被移除是什么意思)

    直播间被移除是拉黑吗(直播间被移除是什么意思)

  • 苹果手机闹钟响多久会自己停止(苹果手机闹钟响一下就不响了)

    苹果手机闹钟响多久会自己停止(苹果手机闹钟响一下就不响了)

  • 二维码收款语音播报怎么设置的(二维码收款语音播报器怎么申请)

    二维码收款语音播报怎么设置的(二维码收款语音播报器怎么申请)

  • 抖音评论成功但看不见(抖音评论成功却不显示,要点一下才会显示,怎么回事)

    抖音评论成功但看不见(抖音评论成功却不显示,要点一下才会显示,怎么回事)

  • 浮屏是什么(浮屏是啥)

    浮屏是什么(浮屏是啥)

  • 斗鱼什么时候成立的(斗鱼什么时候成年)

    斗鱼什么时候成立的(斗鱼什么时候成年)

  • 缩进2字符是多少厘米(缩进2字符是多少磅)

    缩进2字符是多少厘米(缩进2字符是多少磅)

  • 苹果11有64g吗

    苹果11有64g吗

  • 抖音直播功能在哪(抖音直播界面功能介绍)

    抖音直播功能在哪(抖音直播界面功能介绍)

  • word文档怎么插底纹(word文档怎么插图片)

    word文档怎么插底纹(word文档怎么插图片)

  • 微信突然访问不了相册(微信突然访问不了相册,语音也发不了)

    微信突然访问不了相册(微信突然访问不了相册,语音也发不了)

  • 华为平板m6画质怎么调(华为平板m6帧率)

    华为平板m6画质怎么调(华为平板m6帧率)

  • 花呗能冲qb吗(花呗可以充qq钱包吗)

    花呗能冲qb吗(花呗可以充qq钱包吗)

  • airpods2呼出siri(airpods二代呼出siri)

    airpods2呼出siri(airpods二代呼出siri)

  • vivox23有钱包功能吗(vivo手机有钱包软件么)

    vivox23有钱包功能吗(vivo手机有钱包软件么)

  • 手机号暂停服务是怎么回事(手机号暂停服务多久才会注销)

    手机号暂停服务是怎么回事(手机号暂停服务多久才会注销)

  • 虚拟存储器是(虚拟存储器是为了解决主存容量不够的矛盾)

    虚拟存储器是(虚拟存储器是为了解决主存容量不够的矛盾)

  • 无线路由器设置安全选项是什么?(tp link无线路由器设置)

    无线路由器设置安全选项是什么?(tp link无线路由器设置)

  • 宽带连接错误678怎么解决(宽带连接错误678最简单的解决方法)

    宽带连接错误678怎么解决(宽带连接错误678最简单的解决方法)

  • 织梦中英文站点英文分页修改的方法(织梦58符老师亲测)(织梦网站怎么改logo)

    织梦中英文站点英文分页修改的方法(织梦58符老师亲测)(织梦网站怎么改logo)

  • 亏损企业如何填报企业所得税
  • 物流辅助服务税率
  • 上年多交的增值税能退吗
  • 天猫的费用一共17个分别是什么
  • 租赁的房子
  • 企业微信收款如何同步给别人
  • 材料盘亏税前扣除怎么算
  • 本月有收入免增值税吗
  • 企业注销难道必须要交房产税吗?
  • 一般纳税人有什么优惠政策
  • 低值易耗品进项税额转出账务处理
  • 各税种会计分录
  • 最新土地增值税筹划
  • 销售蔬菜水果需要什么证件
  • 物业维修收费合理吗
  • 建安企业外地项目预缴增值税
  • 正回购和逆回购的区别
  • 可抵扣的金税盘维护费会计分录怎么做?
  • 苹果电脑mac系统怎么用
  • 可转债溢价率多高为好
  • 工伤保险公司缴纳部分为何是0
  • 西方会计要素有哪些
  • 关闭445端口方法命令
  • 怎么激活对话框取消
  • php读取word
  • 580显卡玩吃鸡多少帧
  • php错误级别有哪些
  • 冲账怎么写?
  • 这是我见过最牛的人英语
  • 简易html代码
  • .net tpl
  • vscode插件在哪
  • phpcms下载
  • 保证增信行通俗理解
  • 建筑设备的概念,作用及其研究内容
  • 企业的净资产都有哪些
  • 企业电子发票重开流程
  • 拓展费用入什么科目
  • 食用油交税吗
  • 实收资本为零的风险 债权人
  • 公司固定电话费用挂哪个科目
  • 制造费用期末有余额在借方
  • 高新技术企业研发费用占比要求
  • 公司与公司之间人与人之间最大的区别
  • 以前年度损益调整会计分录
  • 审计 调整分录
  • 红冲上一年度销售收入
  • 账户信息变更说明
  • 纳税人id
  • 房地产企业前期围墙费用
  • 内账会计工作职责和工作流程
  • mysql子查询嵌套查询
  • skydrive pro
  • win10开始按钮点不动
  • XP系统如何设置变流畅
  • 加入跨子网路由什么协议
  • bios设置USB启动英文
  • win7系统升级到win10后,还能还原回来吗
  • ubuntu16安装vnc
  • win7使用率
  • 已停止工作win7
  • windows7桌面回收站打不开
  • windows8输入法
  • win10正式版多少钱
  • linux文件中添加内容
  • unity3d怎么用
  • ie内存怎么清理
  • pygame rect.move
  • unity简单项目
  • unity2019texture
  • JavaScript数据类的特点
  • javascript的push方法
  • jquery插件大全
  • 财税专家刘杨简历图片介绍
  • 税务局举报管理办法
  • 河南税务机关
  • 增值税进项转出补企业所得税
  • 云南国税局官网网站
  • 留抵税额退税政策2022
  • 国家税务总局网址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设