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

  • 微信公众号增粉技巧大合集!(微信公众号增粉优先微媒网赞赏)

    微信公众号增粉技巧大合集!(微信公众号增粉优先微媒网赞赏)

  • 把电话号码拉黑还能收到短信吗(把电话号码拉黑了还能打通吗)

    把电话号码拉黑还能收到短信吗(把电话号码拉黑了还能打通吗)

  • 为什么在拼多多买东西找不到我的订单了(为什么在拼多多买东西没有取件码)

    为什么在拼多多买东西找不到我的订单了(为什么在拼多多买东西没有取件码)

  • excel表格数字排序怎么操作(excel表格自动排序123)

    excel表格数字排序怎么操作(excel表格自动排序123)

  • 小度小度音响功能(你认识小度音响)

    小度小度音响功能(你认识小度音响)

  • smg9500是什么型号

    smg9500是什么型号

  • 播放失败什么原因(老是播放失败)

    播放失败什么原因(老是播放失败)

  • 5g手机流量消耗大吗(5g手机流量消耗太快怎么设置)

    5g手机流量消耗大吗(5g手机流量消耗太快怎么设置)

  • tim电脑在线对方在干嘛(tim在线对方在干嘛)

    tim电脑在线对方在干嘛(tim在线对方在干嘛)

  • 电脑怎么设置软件安在D盘(电脑怎么设置软件安装默认D盘?)

    电脑怎么设置软件安在D盘(电脑怎么设置软件安装默认D盘?)

  • ppt主题模板怎么设置(ppt主题模板怎么弄)

    ppt主题模板怎么设置(ppt主题模板怎么弄)

  • 小米手机屏幕点了没反应怎么办(小米手机屏幕点不了)

    小米手机屏幕点了没反应怎么办(小米手机屏幕点不了)

  • 苹果xsmax防水功能怎么样(xsmax防水么)

    苹果xsmax防水功能怎么样(xsmax防水么)

  • 苹果11多大运行内存(苹果多大运行内存不卡)

    苹果11多大运行内存(苹果多大运行内存不卡)

  • 部分选中快捷键是什么(部分选中快捷键ctrl加什么)

    部分选中快捷键是什么(部分选中快捷键ctrl加什么)

  • 鼠标的左右键的用途(鼠标的左右键的用途视频)

    鼠标的左右键的用途(鼠标的左右键的用途视频)

  • 京东保修服务要买吗(京东保修服务要发票吗)

    京东保修服务要买吗(京东保修服务要发票吗)

  • 云端相册是什么意思(km.m云端相册是什么)

    云端相册是什么意思(km.m云端相册是什么)

  • iPhone11pro怎么关闭siri应用建议(iphone11pro怎么关机开机)

    iPhone11pro怎么关闭siri应用建议(iphone11pro怎么关机开机)

  • vue为何添加不了音乐(vue组件无法显示)

    vue为何添加不了音乐(vue组件无法显示)

  • 能刷快手直播间人数吗(刷快手直播间礼物软件)

    能刷快手直播间人数吗(刷快手直播间礼物软件)

  • 系统通知栏显示qq图标是什么意思(通知栏图标不见了)

    系统通知栏显示qq图标是什么意思(通知栏图标不见了)

  • 为什么搜索手机号找不到微信(为什么搜索手机号搜不到微信)

    为什么搜索手机号找不到微信(为什么搜索手机号搜不到微信)

  • 抖音进小黑屋多久解封(抖音小黑屋多久解除)

    抖音进小黑屋多久解封(抖音小黑屋多久解除)

  • 手机qq录屏功能在哪(手机qq录屏功能什么时候有的?)

    手机qq录屏功能在哪(手机qq录屏功能什么时候有的?)

  • babylon.exe进程有什么作用 babylon进程是什么文件

    babylon.exe进程有什么作用 babylon进程是什么文件

  • 如何选购餐桌?(如何选购餐桌椅)

    如何选购餐桌?(如何选购餐桌椅)

  • 公司出售厂房需要交哪些税
  • 抄税 报税 清卡
  • 息税前利润计算每股收益
  • 股东权益是资产吗
  • 个人转让房产两年内全额计税是什么意思
  • 哪些行业增值税率1%
  • 开票信息中电话号码变更
  • 企业所得税为什么那么高
  • 附加税是当月计算吗
  • 股东购买固定资产能算实收资本么
  • 小规模纳税人申请一般纳税人流程
  • 客户减免费用邮件怎么写
  • 无偿划拨资产涉税问题
  • 跨年度费用怎么入账
  • 受托方的计税价格是什么意思
  • 企业期货投资收益何时记账的
  • 税局代开的法律顾问费能否抵扣
  • 出口退税销项税额计算公式
  • 所得税季报固定资产加速折旧表资产原值
  • 房产企业开发产品出租
  • 无形资产有使用期限
  • 关税税率表包括哪些税种
  • 采购流程会计分录怎么写
  • 税收筹划有哪些特点?
  • 机动车销售统一专票税率
  • 怎样获得win11
  • 免抵退不得免征和抵扣是什么意思
  • 电脑故障检测与维护方法
  • win10重装系统后网卡没了
  • 可以跨城租车吗
  • 无形资产期末余额在哪方
  • php正则表达式匹配链接
  • 用人单位垫付生育津贴怎么算
  • qiankun跨域问题
  • 税负太高会预警吗
  • vue安装使用
  • 出口货物不退税进项可以开具普通发票吗
  • 大前端技术
  • 前端项目实战教程
  • uniapp微信小程序广告
  • vue-cli4创建项目
  • 应付职工薪酬多栏式
  • 购入固定资产应该怎么做账
  • 增值税申报表填错不影响税额
  • 外购存货的成本包括哪些内容
  • 增值税小规模纳税人
  • 外包人员的餐费可以全部扣除吗
  • 劳务公司开发票劳务公司如何转取收入?
  • mongo创建db
  • 农业种植会计
  • 银行电子承兑到期后怎么操作
  • 关联企业债资比怎么计算
  • 如何在sql server中打开已有数据库
  • 一次性加速折旧考虑残值吗
  • 主要业务活动是什么意思
  • 现金解款单的会计分录
  • 公司购轿车会计分录怎么做
  • 四技合同是什么?
  • 记账凭证原始凭证回单的粘贴顺序
  • 住院病假工资如何计算
  • mysql数据库优化方案
  • linux彻底卸载软件
  • win10最新预览版下载
  • windowsxp注册表在哪
  • CentOS 5.4+OpenVZ+Vtonf打造VPS服务器的方法
  • 盗版win7升级win10
  • win7系统在电源选项找不到屏幕亮度
  • cocos2d getPosition()取不到实际坐标问题
  • cocos creator 碰撞检测
  • unity 3d数学
  • unity onbecameinvisible
  • 关于android工程中的assets目录的正确说法
  • 用批处理结束进程
  • 自己搭配电脑
  • jQuery判断checkbox选中状态
  • 浙江市税务局怎么进
  • 消费税要把增值税算进去吗
  • 免抵税额在增值税申报表附表
  • 种植业税收优惠政策2023
  • 车辆免征信息怎么查
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设