UI设计详解

本文主要讲解通过UI设计器设计UI界面过程,会对工程创建,界面设计,代码解析分别进行讲解和说明。 # 工程创建 点击新建工程按钮,创建一个新的UI工程,选择工程路径,输入工程名称,选择模块型号这里选择simulator模拟器,lib脚本库选择V2.4.2,core选择LuatOS-HMI_V4002_RDA8910.pac固件版本,屏幕分辨率宽高分别设置位854,480。 ![UI设计101.png](https://cos.easydoc.net/22753220/files/l2vo06m5.png) # 界面设计 点击UI设计器进行界面设计,进入UI设计器界面,会有一个默认的界面,我们可以删除掉之前控件,添加我们需要的控件。 ![UI设计102.png](https://cos.easydoc.net/22753220/files/l2vozdnk.png) 点击添加组件按钮,添加我们需要的组件,这里我们添加一个背景图片来演示: ![UI设计103.png](https://cos.easydoc.net/22753220/files/l2vp9x5r.png) ![UI设计104.png](https://cos.easydoc.net/22753220/files/l2vpa71h.png) 图片载入后我们只需要在属性下面添加对应图片的路径,就可以显示图片了,首先需要把资源文件放到本地创建的工程文件下面,LuaIDE会提示是否需要加入,点击确认后会添加到当前工程下面。这里添加背景图片路径后显示效果如下: ![UI设计105.png](https://cos.easydoc.net/22753220/files/l2vptop9.png) 按照上面添加图片的方式把我们需要的组件全部添加上去,通过设置组件属性设计出自已想要的效果,下图是添加好所有组件后的显示效果。 ![image.png](https://cos.easydoc.net/22753220/files/l1n72k0a.png) 界面划分,界面设计主要有标题,状态栏,连接控制,数据发送和数据接收几个部分组成 ![image.png](https://cos.easydoc.net/22753220/files/l2y0ewwi.png) # 代码解析 设计器完成UI设计后会自动生成代码,UiDesign.lua是界面设计相关的脚本。 在UiDesign.lua脚本中可以查看当前界面已添加的组件,这里主要用到了标签(Label),图片(Img),按钮(Button),下拉菜单(Dropdown),输入文本(Textarea) ```lua ScreenA = { create = nil, free = nil, contFather_ScreenA = nil, LvglButton1 = objectHide(), LvglImg1 = objectHide(), LvglImg2 = objectHide(), LvglImg3 = objectHide(), LvglImg4 = objectHide(), LvglLabel1 = objectHide(), LvglImg5 = objectHide(), LvglImg6 = objectHide(), LvglLabel2 = objectHide(), LvglLabel3 = objectHide(), LvglButton2 = objectHide(), LvglButton3 = objectHide(), LvglLabel4 = objectHide(), LvglButton4 = objectHide(), LvglButton5 = objectHide(), LvglLabel5 = objectHide(), LvglLabel6 = objectHide(), LvglDropdown1 = objectHide(), LvglLabel7 = objectHide(), LvglTextarea1 = objectHide(), LvglLabel8 = objectHide(), LvglTextarea2 = objectHide(), LvglTextarea3 = objectHide(), LvglImg7 = objectHide(), LvglLabel10 = objectHide(), } ``` 添加组件后,会在UiDesign.lua脚本中生成对应代码,已添加背景图片为例,添加背景图片后自动生成的代码如下所示: ```lua --This is the IMG_PART_MAIN's style of ScreenA.LvglImg1 Style_LvglImg1_1=lvgl.style_t() lvgl.style_init(Style_LvglImg1_1) --This is the base code of ScreenA.LvglImg1 ScreenA.LvglImg1.self = lvgl.img_create(ScreenA.contFather_ScreenA, nil) lvgl.obj_set_click(ScreenA.LvglImg1.self, true) lvgl.img_set_src(ScreenA.LvglImg1.self, "/lua/bg.png") lvgl.obj_align(ScreenA.LvglImg1.self, ScreenA.contFather_ScreenA, lvgl.ALIGN_IN_TOP_LEFT, 0, -1) lvgl.obj_add_style(ScreenA.LvglImg1.self, lvgl.IMG_PART_MAIN, Style_LvglImg1_1) ``` 添加组件对应的事件时,如事件类型选择函数类型,输入对应函数名后,会在UiDesign.lua脚本中自动生成注册按键消息回调函数的代码,在UiHandle.lua脚本中生成对应的空函数。已连接按钮为例,自动生成代码如下: UiDesign.lua脚本的注册按键消息回调函数的代码如下: ```lua --This is to add callback function for ScreenA.LvglButton3 --This is callBack function of ScreenA.LvglButton3 local handleLvglButton3 = function(obj, e) ScreenA.LvglButton3.cb(e) ScreenA.LvglButton3.cb = function(e) if (e == lvgl.EVENT_CLICKED)then Connect_CLICKED() end end end lvgl.obj_set_event_cb(ScreenA.LvglButton3.self, handleLvglButton3) ``` UiHandle.lua是事件处理相关的脚本。UiHandle.lua脚本中生成对应的空函数如下: ```lua --This function name and notes cannot be modified --@@funCfg: <Connect_CLICKED, exist> function Connect_CLICKED() ------------USER CODE DATA-------------- ------------USER CODE DATA-------------- end ``` 注意:横屏的项目,需要修改2处,才能在模拟器和真机上都可以显示正确的效果,lcd.lua脚本中初始化屏参数,宽和高需要互换一下,这里改为width = 480,height = 854。mian.lua脚本中lvgl初始化前添加屏旋转,如下所示: ```lua function demo_WindowInit() lvgl.disp_set_rotation(nil, lvgl.DISP_ROT_270) --屏旋转 lvglUiInitial() end ``` 代码实现逻辑如上所示,其它部分代码实现可以下载源码学习。 ## 视频演示 ![设计器.gif](https://cos.easydoc.net/22753220/files/l1n9mz7s.gif) # 其它参考资料 UI设计器详细使用说明点击右侧蓝色设计器 [设计器](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/drjtxz61#nav_16)