主页界面

## 效果显示 ![首页划分.png](https://cos.easydoc.net/22753220/files/l14cywwb.png) 默认选择全部商品分类,加载nvm中商品数据,遍历加载到商品容器中。选择不同分类商品时,只需要传入不同的商品列表数据就可以刷新列表 功能栏是把图片和标签组合的按键,意在跳转不同的页面 # 代码解析 ## 保存当前选中菜单状态 ```lua focu_menu = 1 focu_sttyle_data = {border = {width = 0}, bg = {radius = 20, opa = 80}} normal_style_data = {border = {width = 0}, bg = {radius = 20, opa = 20}} focu_sttyle = cont.create_style(focu_sttyle_data) normal_style = cont.create_style(normal_style_data) ``` ## 提取生成商品函数方便循环使用 ```lua function create_list(v) drinks_data = v.drinks_data lvgl.obj_clean(right_cont_body) for i = 1, #drinks_data do if i == 1 then align_ = lvgl.ALIGN_IN_TOP_LEFT align_to_ = right_cont_body elseif i > 1 and i <= 5 then index = i - 1 align_to_ = drinks_data[index].cont align_ = lvgl.ALIGN_OUT_RIGHT_MID elseif i > 5 then index = i - 5 align_to_ = drinks_data[index].cont align_ = lvgl.ALIGN_OUT_BOTTOM_MID end drinks_data[i].cont = cont.create(right_cont_body, { W = LCD_W * 2 / 15, H = LCD_W * 2 / 15, align = align_, align_to = align_to_, click = true, event = function(obj, event) if (event == lvgl.EVENT_CLICKED) then choose_page.create({goods_info_data = drinks_data[i]}) end end, style = { border = {width = 3, color = 0xccffcc}, bg = {radius = 0, color = 0xffffff} } }) drinks_data[i].img = img.create(drinks_data[i].cont, { align = lvgl.ALIGN_IN_TOP_MID, src = "/lua/" .. drinks_data[i].src..".jpg" }) drinks_data[i].price_label = label.create(drinks_data[i].cont, { text = "#ff0000 " .. drinks_data[i].price .. "元", align = lvgl.ALIGN_IN_BOTTOM_LEFT, recolor = true, align_x = 5, align_y = -5, style = {text = {font = style.font16}} }) drinks_data[i].name_label = label.create(drinks_data[i].cont, { text = drinks_data[i].name, align = lvgl.ALIGN_OUT_TOP_LEFT, align_to = drinks_data[i].price_label, style = {text = {font = style.font16}} }) end end ``` ## 必要容器 ```lua function create() lvgl.obj_clean(right_cont) right_cont_head = cont.create(right_cont, { W = LCD_W * 2 / 3, H = LCD_H * 3 / 24, align = lvgl.ALIGN_IN_TOP_RIGHT, click = false, style = {border = {width = 0}, bg = {opa = 0}} }) menu_cont = cont.create(right_cont_head, { W = LCD_W * 11 / 36, H = LCD_H * 3 / 24, align = lvgl.ALIGN_IN_RIGHT_MID, click = false, layout = lvgl.LAYOUT_PRETTY_MID, style = { border = {width = 0}, pad = {left = 10, right = 10, top = 0, bottom = 0}, bg = {radius = 20, color = 0x2471A3} } }) ``` ```lua menu_data = { {text = "全部", src = "quanbu", data = "all_goods"}, {text = "零食", src = "lingshi", data = "all_foods"}, {text = "饮料", src = "yinliao", data = "all_drinks"}, {text = "其他", src = "qita", data = "other_goods"} } for i = 1, #menu_data do menu_data[i].cont = cont.create(menu_cont, { W = LCD_W * 2 / 36, H = LCD_H * 3 / 24, click = true, event = function(obj, event) if (event == lvgl.EVENT_CLICKED) then if focu_menu then lvgl.obj_add_style(menu_data[focu_menu].cont, lvgl.CONT_PART_MAIN, normal_style) end create_list({drinks_data = nvm.get(menu_data[i].data)}) focu_menu = i lvgl.obj_add_style(menu_data[i].cont, lvgl.CONT_PART_MAIN, focu_sttyle) end end, style = i == 1 and focu_sttyle_data or normal_style_data }) menu_data[i].img = img.create(menu_data[i].cont, { align = lvgl.ALIGN_IN_TOP_MID, align_y = 5, src = "/lua/" .. menu_data[i].src .. ".bin", style = {recolor = 0xffffff} }) menu_data[i].label = label.create(menu_data[i].cont, { text = menu_data[i].text, -- recolor = true, align = lvgl.ALIGN_IN_BOTTOM_MID, align_y = -10, style = {text = {font = style.font18, color = 0xffffff}} }) end right_cont_body = cont.create(right_cont, { W = LCD_W * 2 / 3, H = LCD_H * 17 / 24, align = lvgl.ALIGN_OUT_BOTTOM_MID, align_to = right_cont_head, click = false, style = {border = {width = 0}, bg = {color = 0xffffff}} }) ``` ## 生成商品列表 ```lua create_list({drinks_data = nvm.get("all_goods")}) ``` ## 右下方多功能入口,检查共性循环生成放入容器 ```lua right_cont_foot = cont.create(right_cont, { W = LCD_W * 2 / 3, H = LCD_H * 2 / 12, align = lvgl.ALIGN_IN_BOTTOM_RIGHT, click = false, style = {border = {width = 0}, bg = {color = 0xccccff}} }) foot_data = { { src = "quhuo", text = "点我取货", color = 0x66BB6A, align = lvgl.ALIGN_IN_LEFT_MID, event = pick_up_page.create }, { src = "xiai", text = "点我帮助", color = 0x1E88E5, align = lvgl.ALIGN_CENTER, event = help_page.create }, { src = "huodong-copy", text = "更多活动", color = 0xF44336, align = lvgl.ALIGN_IN_RIGHT_MID, event = help_page.create } } for i = 1, #foot_data do foot_data[i].cont = cont.create(right_cont_foot, { W = LCD_W * 2 / 9, H = LCD_H * 2 / 12, align = foot_data[i].align, click = true, event = function(obj, event) if (event == lvgl.EVENT_CLICKED) then foot_data[i].event() end end, style = { border = {width = 0}, bg = {opa = 150, radius = 20, color = foot_data[i].color} } }) foot_data[i].img = img.create(foot_data[i].cont, { align = lvgl.ALIGN_IN_TOP_MID, align_y = 5, src = "/lua/" .. foot_data[i].src .. ".bin", style = {recolor = 0xffffff} }) foot_data[i].label = label.create(foot_data[i].cont, { text = foot_data[i].text, align = lvgl.ALIGN_IN_BOTTOM_MID, align_y = -5, style = {text = {font = style.font18, color = 0xffffff}} }) end ```