付款界面

## 效果图 ![付款界面.png](https://cos.easydoc.net/22753220/files/l14dqovc.png) ## 界面划分 ### 点击商品列表的具体商品,商品信息作为参数加载到这个页面上。实际做产品时可通过商品信息向服务端获取收款码内容。lvgl支持了二维码,设置二维码内容。 ![付款界面划分.png](https://cos.easydoc.net/22753220/files/l14ds47r.png) # 代码解析 ## 页面入口,接收顾客所选商品测试数据,单独调试此页面时可用到的信息,并生成二维码 ```lua function create(v) if not v then v = {} end lvgl.obj_clean(right_cont) left_img_cont = cont.create(right_cont, { W = LCD_W * 4 / 18, H = LCD_H * 47 / 48, align = lvgl.ALIGN_IN_LEFT_MID, align_x = LCD_W / 27, click = false, style = {border = {width = 0}, bg = {radius = 30}} }) img_choose = img.create(left_img_cont, {src = "/lua/l1.jpg"}) right_pay_cont = cont.create(right_cont, { W = LCD_W * 13 / 36, H = LCD_H * 47 / 48, align = lvgl.ALIGN_OUT_RIGHT_MID, align_x = 10, align_to = left_img_cont, click = false, style = {border = {width = 0}, bg = {radius = 20}} }) ``` ## 测试数据,单独调试此页面时可用到 ```lua goods_info_data = v.goods_info_data or { src = "kele", price = "3.00", name = "百事可乐" } ``` ## ```lua goods_info_cont = cont.create(right_pay_cont, { W = LCD_W / 4, H = LCD_H * 21 / 48, align = lvgl.ALIGN_IN_TOP_MID, click = false, style = {border = {width = 0}, bg = {radius = 0, color = 0xffffff}} }) goods_img = img.create(goods_info_cont, { align = lvgl.ALIGN_IN_TOP_MID, align_y = 35, -- zoom = 512, src = "/lua/" .. goods_info_data.src..".jpg" }) price_label = label.create(goods_info_cont, { text = "#ff0000 " .. goods_info_data.price .. "元", align = lvgl.ALIGN_IN_BOTTOM_LEFT, recolor = true, align_x = 10, align_y = -10, style = {text = {font = style.font24}} }) name_label = label.create(goods_info_cont, { text = goods_info_data.name, align = lvgl.ALIGN_OUT_TOP_LEFT, align_to = price_label, align_y = -5, style = {text = {font = style.font24}} }) back_cont = cont.create(right_pay_cont, { W = LCD_W * 6 / 54, H = LCD_W * 6 / 108, align = lvgl.ALIGN_IN_TOP_RIGHT, align_x = -5, align_y = 5, click = true, event = back_home, style = { border = {width = 0}, shadow = { width = 10, spread = 1, opa = 60, color = 0, ofs_y = 2, ofs_x = 2 }, bg = {radius = 20, color = 0xffd264} } }) back_img = img.create(back_cont, { align = lvgl.ALIGN_IN_TOP_MID, src = "/lua/back.bin", style = {recolor = 0xffffff} }) clock_img = img.create(back_cont, { align = lvgl.ALIGN_IN_BOTTOM_LEFT, align_x = 15, src = "/lua/clock.bin", style = {recolor = 0xffffff} }) auto_back_time_label = label.create(back_cont, { text = "113秒", align = lvgl.ALIGN_OUT_RIGHT_MID, align_to = clock_img, align_x = 5, style = {text = {font = style.font14, color = 0xffffff}} }) ``` ## 为二维码套上彩色边框 ```lua qrcode_cont = cont.create(right_pay_cont, { W = LCD_H * 16 / 48, H = LCD_H * 16 / 48, align = lvgl.ALIGN_OUT_BOTTOM_MID, align_to = goods_info_cont, click = false, style = {border = {width = 3, color = 0xccffcc}, bg = {radius = 5}} }) ``` ## 二维码生成 ```lua qrcode.create(qrcode_cont, { W = (LCD_H * 16 / 48) - 5, H = (LCD_H * 16 / 48) - 5, text = "请打钱" }) ``` ## ```lua qrcode_tips_label = label.create(right_pay_cont, { text = "请扫描上方二维码进行支付", align = lvgl.ALIGN_OUT_BOTTOM_MID, align_to = qrcode_cont, style = {text = {font = style.font18}} }) pay_choice_cont = cont.create(right_pay_cont, { W = LCD_W * 12 / 36, H = LCD_H * 5 / 48, align = lvgl.ALIGN_IN_BOTTOM_MID, click = false, layout = lvgl.LAYOUT_PRETTY_MID, style = { border = {width = 0}, -- bg = {radius = 0, opa = 100, color = 0xffffff}, pad = {left = 55, right = 55, top = 0, bottom = 0} } }) tips_label = label.create(right_pay_cont, { text = "本设备支持以下支付方式", align = lvgl.ALIGN_OUT_TOP_MID, align_to = pay_choice_cont, align_y = -5, style = {text = {font = style.font14}} }) pay_data = { {src = "wechat", text = "微信"}, {src = "zhifubao", text = "支付宝"}, {src = "yunshanfu", text = "云闪付"} } --提取方法生成,可支持付款的图片与提示标签 for i = 1, #pay_data do pay_data[i].cont = cont.create(pay_choice_cont, { W = LCD_H * 5 / 48, H = LCD_H * 5 / 48, click = false, style = {border = {width = 0}} }) pay_data[i].img = img.create(pay_data[i].cont, { align = lvgl.ALIGN_IN_TOP_MID, src = "/lua/" .. pay_data[i].src .. ".jpg" }) pay_data[i].label = label.create(pay_data[i].cont, { text = pay_data[i].text, align = lvgl.ALIGN_IN_BOTTOM_MID, align_y = -5, style = {text = {font = style.font14}} }) end end ```