位置: 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 什么意思)

  • 苹果13夜景模式怎么拍(苹果13夜景模式真厉害)

    苹果13夜景模式怎么拍(苹果13夜景模式真厉害)

  • 天玑800处理器是高端手机处理器吗(天玑800处理器是哪个公司的)

    天玑800处理器是高端手机处理器吗(天玑800处理器是哪个公司的)

  • 华为mate20可不可以插内存卡(华为mate20可不可以反向充电)

    华为mate20可不可以插内存卡(华为mate20可不可以反向充电)

  • mate20能无线充电吗(荣耀magic5可以无线充电吗)

    mate20能无线充电吗(荣耀magic5可以无线充电吗)

  • shadowrocket显示超时

    shadowrocket显示超时

  • 探探匹配成功但是都不说话(探探匹配成功的人突然消失了)

    探探匹配成功但是都不说话(探探匹配成功的人突然消失了)

  • 苹果x抬头唤醒怎么设置(苹果x抬头唤醒怎么关)

    苹果x抬头唤醒怎么设置(苹果x抬头唤醒怎么关)

  • 一般情况下,excel默认的显示格式居中对齐的是(excel一般操作)

    一般情况下,excel默认的显示格式居中对齐的是(excel一般操作)

  • 开发者选项最小宽度是什么意思(开发者选项最小宽度默认)

    开发者选项最小宽度是什么意思(开发者选项最小宽度默认)

  • qq拆礼物对方知道吗(qq送礼物对方拆开)

    qq拆礼物对方知道吗(qq送礼物对方拆开)

  • 华为p40双卡怎么放(华为p40双卡怎么切换打电话)

    华为p40双卡怎么放(华为p40双卡怎么切换打电话)

  • 红米k20上市时间(红米k20几时发布的)

    红米k20上市时间(红米k20几时发布的)

  • 为什么usb连接了电脑没有显示(为什么usb连接了电脑没有显示传输文件)

    为什么usb连接了电脑没有显示(为什么usb连接了电脑没有显示传输文件)

  • 淘宝人生怎么去掉头饰(淘宝人生怎么去广州)

    淘宝人生怎么去掉头饰(淘宝人生怎么去广州)

  • 魅族16s怎么打开防误触(魅族16s怎么打开微距)

    魅族16s怎么打开防误触(魅族16s怎么打开微距)

  • 哈罗出行顺风车有发票吗(哈罗出行顺风车可以开电子发票吗)

    哈罗出行顺风车有发票吗(哈罗出行顺风车可以开电子发票吗)

  • 红袖怎么删除订阅(红袖怎么删社区帖子)

    红袖怎么删除订阅(红袖怎么删社区帖子)

  • 苹果xs自带无线耳机吗(iphonexs的无线充电怎么用)

    苹果xs自带无线耳机吗(iphonexs的无线充电怎么用)

  • 巧影怎么叠加两个视频(巧影怎么合成照片)

    巧影怎么叠加两个视频(巧影怎么合成照片)

  • win10远程连接提示函数错误怎么办解决方法(win10远程连接提示身份验证错误)

    win10远程连接提示函数错误怎么办解决方法(win10远程连接提示身份验证错误)

  • vue+neo4j +纯前端(neovis.js / neo4j-driver) 实现 知识图谱的集成 大干货--踩坑无数!!!将经验分享给有需要的小伙伴(vue.js前端)

    vue+neo4j +纯前端(neovis.js / neo4j-driver) 实现 知识图谱的集成 大干货--踩坑无数!!!将经验分享给有需要的小伙伴(vue.js前端)

  • 什么情况才能开专票
  • 税收 特征
  • 增值税专用发票抵扣期限
  • 金税四期如何应对
  • 固定资产怎么进行折旧处理
  • 土地入固定资产还是无形资产
  • 开办期间的费用,没有发票,咋抵扣啊
  • 其他综合收益科目性质
  • 应收账款核销的会计处理
  • 回购股份限售
  • 资产减值准备的税务处理
  • 缴纳社保的会计分录怎么做
  • 企业的房屋是否能确认为存货?为什么?(简单描述即可)
  • 审计范围包括什么内容
  • 差旅费报销怎么做账
  • 公司注销实收资本可以退回股东吗?
  • 出口退税计算方式
  • 房地产企业用电计入什么科目
  • 企业拆迁补偿款会计分录
  • 同一个单位,应收应付都有,怎么调账
  • 收代扣代收代征手续费会计分录
  • 往年银行余额和账目不符怎么调整
  • 税控服务系统
  • 非营利组织免税资格可以免些什么税
  • 新药从开发到生产的流程
  • 订阅报纸属于会计科目吗
  • 残疾人名下有房产可以申请残疾人补贴吗?
  • 收入负数怎么分录
  • 五险二金的二金有什么好处
  • 静态回收期计算方法例子
  • php测验
  • 滞纳金不得超过税款
  • 企业所得税退税流程
  • 会计差错更正账务处理会计分录
  • 饲料企业经营范围
  • 存货的采购成本包括
  • python雪花算法生成id
  • 土地增值税扣除项目税金包括哪些
  • 体验了才明白的作文范文
  • 购买车辆的进项税怎么抵扣
  • 帝国cms栏目没有了
  • 普通发票增量需要什么资料
  • 微擎框架是开源的吗
  • sql存储过程几个主要步骤
  • Python中__slots__限制属性
  • 已缴款未入库是缴费成功了吗
  • 本期应补退税额就是交钱吗
  • 财务做帐的金额怎么算
  • 农产品进项税额抵扣范围
  • 空白发票作废怎么处理
  • 委托加工物资的消费税
  • 个贷系统平账专户怎么做分录
  • 研发费用加计扣除政策指引2.0
  • 未取得发票能计入在建工程吗
  • 招标代理服务费取费标准
  • 小规模附加税优惠政策最新2023
  • Transact_SQL 小手册
  • 清空表内数据语句
  • 微软安装环境
  • win8系统手机
  • window所有程序在哪里
  • u盘装系统软件哪个好
  • brasil.exe是什么进程
  • window组件在哪里
  • crossfire.exe是什么
  • win7系统的虚拟内存在哪里
  • 怎么把硬盘安装到电脑上
  • 微软将为11增加AI助手
  • 万向节锁到底是什么
  • linux中切换目录命令符
  • android开发范例实战宝典
  • 用javascript写表单代码
  • javascript点击按钮改变字体颜色
  • js function函数
  • jquery插件是干什么的
  • netbeans12.0安装教程
  • 哪些初级农产品可以免税
  • 新一轮税制改革的意义
  • 湖南耕地占用税标准
  • 对方申请了红字信息表我这边怎么操作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设