深入学习LVGL8.2的笔记分享

LVGL8.2学习笔记

  • LVGL控件的基础知识
  • (1) C语言编写的LVGL以结构体的形式实现类似C++ “Class”的思想:
  • (2) 父子对象的默认关系
  • LVGL基础对象
  • LVGL控件的基本属性及相关函数
  • (1) 大小(size)相关的API函数:
  • (2) 位置(position)相关的API函数:
  • (3) 对齐(alignment)相关的API函数:
  • (4) 样式(styles)相关的API函数:
  • (5) 事件(events)相关的API函数:
  • ——————————————–控件的使用———————————————
  • (一)标签控件(label)
  • 1. 创建标签
  • 2. 标签文本设置
  • 3. 文本样式设置
  • 4. 文本超出部件大小
  • (二)按钮控件(Button)
  • 1.按钮创建及样式配置
  • (三)开关控件(Switch)
  • 1.开关创建及样式配置
  • 2.通过代码设定开关状态
  • 3.开关状态获取
  • (四)复选框控件(CheckBox)
  • 1.复选框创建及文本设置
  • 2.复选框状态设置
  • 3.复选框状态获取
  • (五)进度条控件(Bar)
  • 1.进度条创建
  • 2.进度条模式、起始值设置
  • 3.进度条定时器回调测试
  • –测试效果图–
  • (六)加载器控件(Spinner)
  • (七)LED控件(Led)
  • 1.LED创建
  • 2.LED状态切换
  • (八)列表条控件(List)
  • 1.列表的创建
  • 2.LVGL自带的图标
  • (九)下拉列表控件(Dropdown)
  • 1.下拉列表的创建
  • (十)滚轮控件(Roller)
  • 1.滚轮的创建
  • (十一)滑块控件(Slider)
  • 1.滑块的创建
  • (十二)圆弧控件(Arc)
  • 1.圆弧的创建
  • (十三)线条控件(Line)
  • 1.线条的创建
  • (十四)图片控件(Img)
  • 1.图片的创建
  • (十五)色环条控件(colorwheel)
  • 1.色环的创建
  • (十六)按钮矩阵控件(Btnmatrix)
  • 1.按钮矩阵的创建(示例)
  • 效果图
  • (十七)文本区域控件(Textarea)
  • 1.文本的创建(示例)
  • 效果图
  • (十八)键盘控件(Keyboard)
  • 1.键盘的创建(示例)
  • (十九)图片按钮控件(Imgbtn)
  • 1.图片按钮的创建(示例)
  • 效果图
  • (二十)选项卡控件(Tabview)
  • 1.选项卡的创建(示例)
  • 效果图
  • (二十一)平铺视图控件(Tileview)
  • 1.平铺视图的创建(示例)
  • 效果图
  • (二十二)窗口部件控件(Win)
  • 1.窗口部件的创建(示例)
  • 效果图
  • (二十三)消息框控件(Msgbox)
  • 1.消息框的创建(示例)
  • 效果图
  • (二十四)微调器控件(Spinbox)
  • 1.微调器的创建(示例)
  • 效果图
  • (二十五)表格控件(Table)
  • 1.表格的创建(示例)
  • 效果图
  • (二十六)中文字库应用
  • 字体生成工具的使用
  • 参考资料
  • —–LVGL官网手册链接—–
  • —–百问网LVGL参考手册链接—–

  • 笔记主要记录LVGL控件基本的编程使用和相关的程序,并且在程序中对使用到的API函数进行简要注解(有些是个人的理解),以便后续根据实际项目所需直接套用对应的控件代码修改使用;本文主要参考的是正点原子的LVGL相关教程。

    LVGL控件的基础知识

    (1) C语言编写的LVGL以结构体的形式实现类似C++ “Class”的思想:

    #mermaid-svg-TAj29S0CwzLWZ8Gc {font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .error-icon{fill:#552222;}#mermaid-svg-TAj29S0CwzLWZ8Gc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TAj29S0CwzLWZ8Gc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .marker.cross{stroke:#333333;}#mermaid-svg-TAj29S0CwzLWZ8Gc svg{font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .label{font-family:”trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster-label text{fill:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster-label span{color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .label text,#mermaid-svg-TAj29S0CwzLWZ8Gc span{fill:#333;color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .node rect,#mermaid-svg-TAj29S0CwzLWZ8Gc .node circle,#mermaid-svg-TAj29S0CwzLWZ8Gc .node ellipse,#mermaid-svg-TAj29S0CwzLWZ8Gc .node polygon,#mermaid-svg-TAj29S0CwzLWZ8Gc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .node .label{text-align:center;}#mermaid-svg-TAj29S0CwzLWZ8Gc .node.clickable{cursor:pointer;}#mermaid-svg-TAj29S0CwzLWZ8Gc .arrowheadPath{fill:#333333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster text{fill:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster span{color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TAj29S0CwzLWZ8Gc :root{–mermaid-font-family:”trebuchet ms”,verdana,arial,sans-serif;}

    实例化

    派生

    基础对象lv_obj_t

    基础/父 对象

    子对象

    按钮lv_btn

    标签lv_label

    进度条lv_bar

    下拉列表lv_dropdown

    开关lv_switch

    ….etc

    图中的子对象也可以作为父对象,如以lv_btn作为父对象,lv_label为子对象。

    (2) 父子对象的默认关系

  • 子对象会随着父对象移动,且移动时相对父对象的位置不变
  • 当子对象的位置超出父对象的范围,则子对象超出的部分不会显示
  • LVGL基础对象

    lv_obj_t *obj = lv_obj_create(lv_scr_act());
    
    lv_scr_act()        /*以当前屏幕创建对象*/
    
    scr_act_width()     /*获取活动屏幕的宽度*/
    scr_act_height()    /*获取活动屏幕的宽度*/
    
    

    LVGL控件的基本属性及相关函数

    基本属性 作用
    大小(size) 宽度和高度设置
    位置(position) 设置控件的相对屏幕/父对象的位置,默认以左上角为原点,向下为Y轴,向右为X轴
    对齐(alignment) 1.可设置子对象参照父对象对齐;2.一个对象参照另一个对象对齐
    样式(styles) 设置控件的外观属性
    事件(events) 控件的动作触发回调函数(事件),在函数中进行相关的处理操作

    (1) 大小(size)相关的API函数:

    /*设置控件的宽度*/
    lv_obj_set_width(obj, new_width);
    /*设置高度*/
    lv_obj_set_height(obj, new_height);
    /*同时设置宽度、高度*/
    lv_obj_set_size(obj, new_width, new_height);
    /*获取当前活动屏幕宽高*/
    lv_obj_get_width(lv_scr_act());
    lv_obj_get_height(lv_scr_act());
    

    (2) 位置(position)相关的API函数:

    /*设置X坐标*/
    lv_obj_set_x(obj, new_x);
    /*设置Y轴坐标*/
    lv_obj_set_y(obj, new_y);
    /*同时设置X、Y轴坐标*/
    lv_obj_set_pos(obj, new_x, new_y);
    

    (3) 对齐(alignment)相关的API函数:

    /*参照父对象对齐,一般用于子对象的在父对象的内部的相对位置设置*/
    lv_obj_set_align(obj, align);
    /*参照父对象对齐之后,再进行偏移*/
    lv_obj_align(obj, align, x, y);
    /*参照其他对象对齐(非父子关系),再进行偏移*/
    lv_obj_align_to(obj_to_align, reference_obj, align, x, y);
    

    对齐模式(align)的选择可参考下图中的相对位置;灰色方框内表示父子对象可选的对齐方式,灰色方框外表示非父子对象可选的对齐方式

    (4) 样式(styles)相关的API函数:

    /*自定义样式添加的基本流程;(可封装为一个函数)*/
    /*-------------------------------------Start--------------------------------------*/
    static lv_style_t style; 								/* 定义样式变量,需设置为静态或全局 */
    lv_obj_t* obj = lv_obj_create(lv_scr_act());			/* 创建控件 */
    lv_style_init(&style); 									/* 初始化样式 */
    /**每个控件都有不同的样式属性**/
    /*--(大小)Size--(位置)Position--(背景)Background--(轮廓)Outline--(边框)Border--(阴影)Shadow--其他--*/
    /*可参考LVGL手册查找对应API,举例如下*/
    lv_style_set_bg_color(&style, lv_color_hex(0xffffff)); 	/* 设置背景颜色 */
    lv_obj_set_style_opa(obj,100,LV_STATE_DEFAULT);       /* 设置控件透明度 */
    lv_obj_set_style_text_font(obj,&lv_font_montserrat_14,LV_STATE_DEFAULT); /*设置文本字体*/
    
    lv_obj_t * obj = lv_obj_create(lv_scr_act()); 			/* 创建一个部件 */
    lv_obj_add_style(obj, & style, LV_STATE_DEFAULT); 		/* 设置部件的样式 */
    /*-------------------------------------End--------------------------------------*/
    
    /*本地样式的添加*/
    /*-------------------------------------Start--------------------------------------*/
    lv_obj_t * obj = lv_obj_create(lv_scr_act()); 						        /* 创建部件 */
    lv_obj_set_style_bg_color(obj, lv_color_hex(0xffffff),LV_STATE_DEFAULT);	/* 设置部件的样式 */
    
    /*-------------------------------------End--------------------------------------*/
    
    
    /*--------------------------------------------------------------------------------*/
    /*--------------------------控件在什么状态下使样式生效---------------------------*/
    enum {
    
        LV_STATE_DEFAULT     	=  0x0000,		 /* 默认状态 */
        LV_STATE_CHECKED     	=  0x0001,		 /* 切换或选中状态 */
        LV_STATE_FOCUSED     	=  0x0002,		 /* 通过键盘、编码器聚焦或通过触摸板、鼠标单击 */
        LV_STATE_FOCUS_KEY   	=  0x0004,		 /* 通过键盘、编码器聚焦 */
        LV_STATE_EDITED      	=  0x0008,		 /* 由编码器编辑 */
        LV_STATE_HOVERED     	=  0x0010,		 /* 鼠标悬停(现在不支持)*/
        LV_STATE_PRESSED     	=  0x0020,		 /* 已按下 */
        LV_STATE_SCROLLED    	=  0x0040,		 /* 滚动状态 */
        LV_STATE_DISABLED    	=  0x0080,		 /* 禁用状态 */
        …
    };
    /*--------------------------------------------------------------------------------*/
    
    

    也可以单独设置控件的各个组成部分的样式,例如滑块的组成部分,可单独设置样式。

    (5) 事件(events)相关的API函数:

    /*****不同的事件类型共用一个事件回调函数******/
    static void event_cb( lv_event_t *e )
    {
        lv_event_code_t   code = lv_event_get_code(e);	 /* 第一步:获取事件类型 */
    	if ( code == LV_EVENT_CLICKED )				     /* 第二步:判断事件类型 */
    	{
            		printf(“事件类型: 按下后释放\r\n”);	 /* 第三步:执行相应操作 */
    	}
    	else if ( code == LV_EVENT_LONG_PRESSED)
    	{
            		printf(“事件类型:按下(长按)\r\n”);	
    	}
    }
    
    /*****不同的部件共用一个事件回调函数******/
    static void event_cb( lv_event_t *e )
    {
    	lv_obj_t  *target = lv_event_get_target(e); 		 /* 第一步:获取触发事件的部件 */
    	if ( target == parent_obj )			      			 /* 第二步:判断触发事件的部件 */
    	{
            		printf(“父对象触发事件 \r\n”);	 		 /* 第三步:执行相应操作 */
    	}
    	else if ( target == child_obj )
    	{
            		printf(“子对象触发事件 \r\n”);	
    	}
    }
    
    //在控件创建时注册回调函数,例如
    lv_obj_t* btn = lv_btn_create(lv_scr_act());
    lv_obj_add_event_cb(btn,event_cb,LV_EVENT_LONG_PRESSED,NULL);
    
    
  • ——————————————–控件的使用———————————————

  • (一)标签控件(label)

    组成部分 编程对应
    主体 LV_PART_MAIN
    滚动条 LV_PART_SCROLLBAR
    选中的文本 LV_PART_SELECTED

    1. 创建标签

    lv_obj_t* label = lv_label_create(parent); /*parent为标签以什么作为父类*/
    

    2. 标签文本设置

    /*直接设置文本,文本由内存动态分配*/
    lv_label_set_text(label, "Text");
    /*设置文本,文本存放在指定缓存区,慎用!!!*/
    lv_label_set_text_static( label,"Text" );
    /*格式化显示文本,类似printf,可用于事件更新显示*/
    lv_label_set_text_fmt( label, “Value: %d”, 50 ) ;
    

    3. 文本样式设置

    /*背景颜色设置,由于标签默认的背景透明度为最大,因此要显示标签背景还需设置对应的透明度*/
    lv_obj_set_style_bg_color( label, lv_color_hex(0xffe1d4), LV_STATE_DEFAULT);
    lv_obj_set_style_opa(label,100,LV_STATE_DEFAULT);
    /*字体大小设置*/
    lv_obj_set_style_text_font( label, &lv_font_montserrat_30, LV_STATE_DEFAULT);
    /*文本颜色设置*/
    lv_obj_set_style_text_color( label, lv_color_hex(0xf7b37b), LV_STATE_DEFAULT);
    /*设置个别文本的字体颜色*/
    lv_label_set_recolor( label, true ); /*开启重新着色功能*/
    lv_label_set_text( label, "hallo #1E90FF lvgl# " ); /*单独设置颜色*/
    
  • 设置个别文本的字体颜色效果:

  • 若需要更改字体可在lv_conf.h修改如下宏定义:

  • 4. 文本超出部件大小

    (1). 若设置了部件大小lv_obj_set_size( )则文本超出部分会被裁剪掉;若没有限定标签部件大小,则自动扩展为文本大小。
    (2).设置长文本模式

    lv_label_set_long_mode(label,LV_LABEL_LONG_...);
    /*对应可选的长文本模式*/
    enum {
    		/*默认模式,如果部件大小固定,超出文本被裁剪*/
    	    LV_LABEL_LONG_WRAP,  /**< Keep the object width, wrap the too long lines and expand the object height*/
    	    /*文本最下面超出字符将被替换为...*/
    	    LV_LABEL_LONG_DOT,   /**< Keep the size and write dots at the end if the text is too long*/
    	    /*来回滚动*/
    	    LV_LABEL_LONG_SCROLL,   /**< Keep the size and roll the text back and forth*/
    	    /*循环滚动*/
    	    LV_LABEL_LONG_SCROLL_CIRCULAR,  /**< Keep the size and roll the text circularly*/
    	    /*直接剪切掉外面的文本部分*/
    	    LV_LABEL_LONG_CLIP,     /**< Keep the size and clip the text out of it*/
       };
    

    (二)按钮控件(Button)

    组成部分 编程对应
    主体 LV_PART_MAIN

    1.按钮创建及样式配置

     lv_obj_t  *btn;				 /* 创建全局标签结构体 */	
    /*****多个按钮控件共用同一个回调函数*****/
    static void my_event_cb(lv_event_t *e)
    {
    	lv_obj_t *target = lv_event_get_target();   /*获取触发源*/
    	if(target == /*触发控件 btn1*/ )
    	{
     	   /***事件处理代码***/
    	}
    	else if (target ==/*触发控件 btn2*/)
    	{
    		/***事件处理代码***/
    	}
    	//...
    }
    static void Btn_Create()
    {
     	lv_obj_t   *btn  = lv_btn_create( parent );				            /* 创建标签对象 */
    	lv_obj_set_size( btn, 100, 50 );								    /* 设置大小 */	
    	lv_obj_set_align( btn, LV_ALIGN_CENTER );						    /* 设置对齐方式 */
    	lv_obj_set_style_bg_color( btn, lv_color_hex(0xffe1d4), LV_STATE_PRESSED );    /* 设置背景颜色 */
    	
    	lv_obj_add_flag( btn, LV_OBJ_FLAG_CHECKABLE );	/* 开启状态切换,类似于自锁按钮一样,可保持按下后的状态 */
    	lv_obj_add_event_cb( btn, my_event_cb, LV_EVENT_VALUE_CHANGED,NULL );	    /* 添加事件 注:要使用LV_EVENT_VALUE_CHANGED事件,就必须开启状态切换*/
    }
    

    (三)开关控件(Switch)

    组成部分 编程对应
    主体 LV_PART_MAIN
    手柄 LV_PART_KNOB
    指示器 LV_PART_INDICATOR

    1.开关创建及样式配置

     lv_obj_t  *switch1;				 /* 创建全局标签结构体 */	
     lv_obj_t  *switch2;				 /* 创建全局标签结构体 */	
     
    /*****多个按钮控件共用同一个回调函数*****/
    static void my_event_cb(lv_event_t *e)
    {
    	lv_obj_t *target = lv_event_get_target();   /*获取触发源*/
    	if(target == /*触发控件 switch1*/ )
    	{
     	   /***事件处理代码***/
     	   if(lv_obj_has_state(switch1, LV_STATE_CHECKED)==1) /*判断开关状态*/
     	   {
     	   	 	lv_obj_clear_state(switch2, LV_STATE_CHECKED);	/* 清除开关2的状态*/
     	   }
    	}
    	else if (target ==/*触发控件 switch2*/)
    	{
    		/***事件处理代码***/
    		if(lv_obj_has_state(switch2, LV_STATE_CHECKED)==1) /*判断开关状态*/
     	   {
     	    	lv_obj_clear_state(switch1, LV_STATE_CHECKED);	/* 清除开关1的状态*/
     	   }
    	}
    	//...
    }
    static void Btn_Create()
    {
    	switch1  = lv_switch_create( parent );      /* 创建开关对象 */
    	switch2  = lv_switch_create( parent );      /* 创建开关对象 */
    	/*设置指示器颜色时需要注意添加状态,否则指示器会被主体覆盖看不到效果*/
    	lv_obj_set_style_bg_color(switch1,lv_color_hex(0xFF0000),LV_STATE_CHECKED|LV_PART_INDICATOR);
    	lv_obj_add_event_cb(switch1,my_event_cb,LV_EVENT_VALUE_CHANGED,NULL);  /* 注册回调函数 */
    }
    

    2.通过代码设定开关状态

        /**/	
    
    	lv_obj_add_state(switch1, LV_STATE_CHECKED | LV_STATE_DISABLED);	/* 添加状态:默认打开且不可修改 */
    	lv_obj_clear_state(switch1, LV_STATE_CHECKED | LV_STATE_DISABLED);	/* 清除开关的状态*/
    

    3.开关状态获取

    	lv_obj_has_state(switch1, LV_STATE_CHECKED)					 /* 返回值:bool类型,开 :1;关: 0 */
    

    (四)复选框控件(CheckBox)

    组成部分 编程对应
    主体 LV_PART_MAIN
    勾选框 LV_PART_INDICATOR

    1.复选框创建及文本设置

    lv_obj_t  *checkbox;				/* 创建全局复选框结构体 */
    
    static void my_event_cb(lv_event_t * e)
    {
        lv_event_code_t code = lv_event_get_code(e);
        if(code == LV_EVENT_VALUE_CHANGED)
        {
            /*勾选了进行处理*/
        }
        else 
        {
            /*取消勾选进行处理*/
        }
    }
    
    static void CheckBox_Create()
    {
    	checkbox  = lv_checkbox_create (parent );				/* 创建复选框 */
    	lv_checkbox_set_text( checkbox, "remember the password" );			/* 设置文本内容 */
    	lv_obj_set_align(checkbox,LV_ALIGN_CENTER);
    	lv_obj_set_style_pad_column( checkbox, 20, LV_STATE_DEFAULT ); 		/* 设置文本和勾选框的间距 */
    	lv_obj_add_event_cb(checkbox  ,my_event_cb,LV_EVENT_VALUE_CHANGED,NULL);
    }
    

    2.复选框状态设置

    	lv_obj_add_state(checkbox, LV_STATE_CHECKED | LV_STATE_DISABLED);	/* 添加状态:默认选中且不可修改 */
    	lv_obj_clear_state(checkbox, LV_STATE_CHECKED | LV_STATE_DISABLED);	/* 清除复选框的状态 */
    

    3.复选框状态获取

    	lv_obj_has_state(checkbox, LV_STATE_CHECKED);					 /* 返回值:1,选中; 0,非选中 */
    

    (五)进度条控件(Bar)

    组成部分 编程对应
    主体 LV_PART_MAIN
    指示器 LV_PART_INDICATOR

    1.进度条创建

    static void CheckBox_Create()
    {
    	lv_obj_t  *bar  = lv_bar_create ( parent );					/* 创建进度条部件 */
    	lv_obj_set_size( bar, 400, 20 );							/* 设置大小 */
    	lv_obj_set_align(bar,LV_ALIGN_CENTER);						/* 设置位置 */
    	lv_bar_set_range( bar, -100, 100 );					    	/* 设置范围值 */
    	lv_obj_set_style_anim_time( bar, 500, LV_STATE_DEFAULT );	/* 动画设置必须放在当前值设置之前 */
    	lv_bar_set_value( bar, 50, LV_ANIM_ON );					/* 设置当前值 */
    }
    /*几点注意事项
    	1.当进度条高度大于宽度时,其方向变为垂直。
    	2.动画时间设置需要放在当前值设置之前 ,否则看不到动画效果。
    	3.动画时间指的是旧值刷新到新值的绘图时间,并不是现实中当前值变化所需的时间。
    */
    

    2.进度条模式、起始值设置

    enum {
        LV_BAR_MODE_NORMAL,			/* 默认模式 */
        LV_BAR_MODE_SYMMETRICAL,	/* 从零值绘制到当前值(当前值可以小于0),该模式不能设置起始值 */
        LV_BAR_MODE_RANGE			/* 允许设置起始值,但起始值必须小于当前值 */
    };
    
    lv_bar_set_mode( bar, LV_BAR_MODE_RANGE );			/* 设置模式 */
    lv_bar_set_start_value( bar, -50, LV_ANIM_OFF );	/* 设置起始值 */
    

    3.进度条定时器回调测试

    uint16_t val=0;
    lv_obj_t *bar;
    lv_label_t *label1;
    static void my_timer_cb(lv_timer_t *timer)
    {
        if(val<100)
        {
            val++;
            lv_bar_set_value(bar,val,LV_ANIM_ON);
            lv_label_set_text_fmt(label1,"%d %%",lv_bar_get_value(bar));
        }
        else
        {
            lv_label_set_text(label1,"Finished");
        }
    }
    
    void MY_GUI()
    {
        bar = lv_bar_create(lv_scr_act());
        lv_obj_set_align(bar,LV_ALIGN_CENTER);
        lv_obj_set_size(bar,200,20);
        lv_bar_set_range(bar,0,100);
        lv_obj_set_style_opa(bar,50,LV_STATE_SCROLLED    	);
    
        label1 = lv_label_create(bar);
        lv_obj_set_style_text_color(label1,lv_color_hex(0x56121c),LV_STATE_DEFAULT);
     	lv_label_set_text(label1, "0%");
        lv_obj_center(label1);
    
        lv_obj_set_style_anim_time(bar,500,LV_STATE_DEFAULT);/*动画效果一定要放在bar值的设置之前*/
    
       // lv_bar_set_value(bar,0,LV_ANIM_ON);
    
        lv_bar_set_mode(bar,LV_BAR_MODE_RANGE);
        lv_bar_set_start_value(bar,0,LV_ANIM_OFF);
        lv_timer_create(my_timer_cb,50,NULL);
    }
    
    –测试效果图–

    (六)加载器控件(Spinner)

    组成部分 编程对应
    主体 LV_PART_MAIN
    指示器 LV_PART_INDICATOR
    手柄 LV_PART_KNOB
    static void Spinner_Create()
    {
        lv_obj_t  *spinner  = lv_spinner_create( lv_scr_act(), 1000, 30 );     /* 这里长度设置太小会有问题 */
        lv_obj_align(spinner,LV_ALIGN_CENTER,0,0);
        lv_obj_set_size(spinner,50,50);
        lv_obj_set_style_arc_color( spinner, lv_color_hex(0x00BFFF), LV_PART_MAIN ); 	  /* 设置主体圆弧颜色 */
        lv_obj_set_style_arc_color( spinner, lv_color_hex(0xFFFACD), LV_PART_INDICATOR ); /* 设置指示器圆弧颜色 */
        lv_obj_set_style_arc_width( spinner, 5, LV_PART_MAIN );					          /* 设置主体圆弧宽度 */
        lv_obj_set_style_arc_width( spinner, 5., LV_PART_INDICATOR );				      /* 设置指示器圆弧宽度 */
    }
    

    (七)LED控件(Led)

    组成部分 编程对应
    主体 LV_PART_MAIN

    - LED部件可进行点击.

    1.LED创建

    static void Led_Create()
    {
        lv_obj_t *led= lv_led_create(lv_scr_act());
        lv_obj_set_size(led,50,50);
        lv_obj_set_align(led,LV_ALIGN_CENTER);
        lv_led_set_color( led, lv_color_hex(0x00BFFF) ); /* 设置LED颜色 */
        lv_led_set_brightness( led, 255 );				 /* 设置LED亮度,范围0~255,感觉没什么变化*/
    }
    

    2.LED状态切换

        lv_led_on( led );				    			/* 打开LED(设置亮度为255)*/
        lv_led_off( led );		    				    /* 关闭LED */
        lv_led_toggle( led );							/* 翻转LED状态 */
    

    (八)列表条控件(List)

    组成部分 编程对应
    主体 LV_PART_MAIN
    滚动条 LV_PART_SCROLLBAR

    1.列表的创建

    lv_obj_t   *list;
    
    static void my_event_cb_1(lv_event_t * e)
    {
        lv_obj_t *target = lv_event_get_target(e);
        printf("%s\n",lv_list_get_btn_text(list,target));    /*获取列表按钮文本*/
    	lv_obj_add_state(target,LV_STATE_FOCUS_KEY);         /*添加选中-聚焦*/
    }
    void MY_GUI()
    {
    
        list = lv_list_create( lv_scr_act() );               /*创建列表*/
        lv_list_add_text( list, "Settings" );                /* 添加列表文本 */
        lv_obj_t  *list_btn = lv_list_add_btn( list, LV_SYMBOL_WIFI, "WLAN");  /*添加列表按键*/
        lv_obj_add_event_cb(list_btn,my_event_cb_1,LV_EVENT_CLICKED,NULL);     /*注册回调函数*/
        lv_obj_t  *list_btn1 = lv_list_add_btn( list, LV_SYMBOL_GPS, "GPS");
        lv_obj_add_event_cb(list_btn1,my_event_cb_1,LV_EVENT_CLICKED,NULL);
        lv_obj_t  *list_btn2 = lv_list_add_btn( list, LV_SYMBOL_BATTERY_1, "BATTERY");
        lv_obj_add_event_cb(list_btn2,my_event_cb_1,LV_EVENT_CLICKED,NULL);
    }
    

    2.LVGL自带的图标

    ———————-官网LVGL图标预览–>Overview–>Fonts——————

    (九)下拉列表控件(Dropdown)

    组成部分 编程对应
    按钮 BUTTON
    列表 LIST

    1.下拉列表的创建

    static void my_event_cb_2(lv_event_t * e)
    {
        lv_obj_t *target = lv_event_get_target(e);
        printf("%d",lv_dropdown_get_selected(target)); /*获取下拉列表选中项的索引,并打印*/
    
        char buf[10];
        lv_dropdown_get_selected_str(target,buf,10);   /*获取下拉列表选中项的文本,并打印*/
        printf("%s\n",buf);
    
    }
    
    void MY_GUI()
    {
        lv_obj_t  *dd = lv_dropdown_create(  lv_scr_act() );   /* 创建下拉列表 */
    
        lv_dropdown_set_options( dd, "a\nb\nc\nd");	   		   /* 设置选项 */
        //lv_dropdown_set_options_static( dd, "a\nb\nc\nd ");  /* 设置选项 (静态)*/
        lv_dropdown_add_option( dd, "e", 4);			       /* 添加选项,索引从0开始,注意若使用这个添加,就不能使用上面静态添加函数 */
        lv_dropdown_set_selected(dd, 1);					   /* 设置选中的选项,注意:索引从0开始 */
        lv_dropdown_set_dir(dd,LV_DIR_NONE);                   /* 设置列表的展开方式*/
        lv_dropdown_set_symbol(dd,LV_SYMBOL_BELL);             /* 设置列表的图标样式*/
    
        lv_obj_add_event_cb(dd,my_event_cb_2,LV_EVENT_VALUE_CHANGED,NULL); /*注册回调函数*/
    }
    
    

    (十)滚轮控件(Roller)

    组成部分 编程对应
    按钮 LV_PART_MAIN
    选项框 LV_PART_SELECTED

    1.滚轮的创建

    static void my_event_cb_3(lv_event_t * e)
    {
        lv_obj_t *target  = lv_event_get_target(e);
        printf("%d",lv_roller_get_selected(target));/*获取滚轮选中项的索引,并打印*/
    
        char buf[10];
        lv_roller_get_selected_str(target,buf,10);  /*获取滚轮选中项的文本,并打印*/
        printf("%s\n",buf);
    
        /*可通过其他事件触发,锁定滚轮为不可选模式,操作如下*/
        /*
            if(/触发条件/)
            {
                lv_obj_add_state(roller,LV_STATE_DISABLED);
            }
            else
            {
                lv_obj_clear_state(roller,LV_STATE_DISABLED);
            }
        */
    }
    
    void MY_GUI()
    {
        lv_obj_t *roller = lv_roller_create(lv_scr_act());                /* 创建滚轮 */
        lv_obj_set_style_text_line_space(roller,30,LV_STATE_DEFAULT);     /* 设置选项间隔 */
        lv_roller_set_options(roller,"a\nb\nc\nd",LV_ROLLER_MODE_NORMAL); /* 设置滚轮选项内容、模式 */
        lv_roller_set_selected(roller,3,LV_ANIM_OFF);                      /* 设置所选项(不设置默认首项),注意:索引从0开始,第三个参数为动画是否开启*/
        lv_roller_set_visible_row_count(roller,3);                        /* 设置可见的行数 */
        lv_obj_add_event_cb(roller,my_event_cb_3,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
    }
    
    

    (十一)滑块控件(Slider)

    组成部分 编程对应
    主体 LV_PART_MAIN
    指示器 LV_PART_INDICATOR
    拖动旋钮 LV_PART_KNOB

    1.滑块的创建

    static void my_event_cb_4(lv_event_t * e)
    {
        lv_obj_t *target  = lv_event_get_target(e); /* 获取触发源 */
        lv_event_code_t code  = lv_event_get_code(e);     /* 获取事件类型 */
    
        if(code == LV_EVENT_VALUE_CHANGED)
        {
            /*获取滑块的左值和当前值,并打印*/
            printf("Left:%d   Right:%d\n",lv_slider_get_left_value(target),lv_slider_get_value(target));
        }
    }
    void MY_GUI()
    {
        lv_obj_t   *slider = lv_slider_create( lv_scr_act() );
        lv_obj_center(slider);
        lv_obj_set_size(slider, 200, 10);						/* 高度<宽度时,滑块为横向 */
    //    lv_obj_set_size(slider, 20, 200);						/* 高度>宽度时,滑块为纵向 */
        lv_slider_set_range(slider, -100, 100);					/* 设置范围值,默认范围0-100 */
        lv_slider_set_mode(slider,LV_SLIDER_MODE_RANGE);        /* 设置滑块的三种模式,模式设置要在值设置之前,不然事件回调获取值会有问题 */
        lv_slider_set_value(slider, 50, LV_ANIM_OFF);			/* 设置当前值 */
        lv_slider_set_left_value(slider, -50, LV_ANIM_OFF);	    /* 设置左值 */
    
        lv_obj_add_event_cb(slider,my_event_cb_4,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
    }
    
    

    —加粗样式滑块的三种模式图解—

    (十二)圆弧控件(Arc)

    组成部分 编程对应
    背景弧 LV_PART_MAIN
    前景弧(指示器) LV_PART_INDICATOR
    拖动旋钮 LV_PART_KNOB

    1.圆弧的创建

    static void my_event_cb_5(lv_event_t * e)
    {
        lv_obj_t *target  = lv_event_get_target(e);       /* 获取触发源 */
        lv_event_code_t code  = lv_event_get_code(e);     /* 获取事件类型 */
    
        if(code == LV_EVENT_VALUE_CHANGED)
        {
            /*获取滑块的左值和当前值,并打印*/
            printf("Value:%d \n",lv_arc_get_value(target));
    
        }
    }
    void MY_GUI()
    {
        lv_obj_t *arc = lv_arc_create(lv_scr_act());
        lv_obj_center(arc);
        lv_arc_set_range(arc,0,200);             /* 设置范围值 */
        lv_arc_set_value(arc,100);               /* 设置当前值,和前景弧不要混用,会出错 */
        lv_arc_set_bg_angles(arc,135,45);        /* 设置背景弧 ,该API要在前景弧设置之前*/
        lv_obj_set_style_arc_color( arc, lv_color_hex(0xEEE9E9), LV_PART_KNOB ); /* 设置旋钮颜色 */
        lv_arc_set_mode(arc,LV_ARC_MODE_SYMMETRICAL);  /* 模式设置 */
    
    //    lv_arc_set_rotation(arc,180);           /* 旋转圆弧的角度 */
        lv_obj_remove_style(arc,NULL,LV_PART_KNOB);
    //    lv_arc_set_change_rate(arc,90);          /* 绘制速率 越大越快*/
        lv_obj_add_event_cb(arc,my_event_cb_5,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
    }
    
    

    —圆弧角度设置图解—

    (十三)线条控件(Line)

    组成部分 编程对应
    主体 LV_PART_MAIN

    1.线条的创建

    static lv_point_t line_points[]={{10,10},{110,20},{100,60},{110,70},{10,80},{10,10}};
    
    void MY_GUI()
    {
        lv_obj_t *line = lv_line_create(lv_scr_act());
        lv_line_set_points(line,line_points,6);                 /* 设置线条的绘制坐标点 */
        lv_obj_set_style_line_width(line,8,LV_PART_MAIN);       /* 设置线条的宽度 */
        lv_obj_set_style_line_rounded(line,true,LV_PART_MAIN);  /* 设置拐角为圆角 */
    //    lv_line_set_y_invert(line,true);                        /* 设置按y轴反转 */
    }
    

    (十四)图片控件(Img)

    组成部分 编程对应
    主体 LV_PART_MAIN

    1.图片的创建

    LV_IMG_DECLARE(NCHU);  /* 声明图片 */
    
    void MY_GUI()
    {
        lv_obj_t *img = lv_img_create(lv_scr_act());
    //    lv_obj_center(img);
        lv_img_set_src(img,&NCHU);
        lv_obj_center(img);
    
    //    lv_img_set_offset_x(img,100);  /*设置图片的x偏移*/
    //    lv_img_set_offset_y(img,50);   /*设置图片的y偏移*/
    
    //    lv_obj_set_style_img_recolor(img, lv_color_hex(0xffe1d2), LV_PART_MAIN); /*图片重新着色,需要配合透明度设置*/
    //    lv_obj_set_style_img_recolor_opa(img, 150, LV_PART_MAIN);     /*图片透明度设置*/
    
    //    lv_img_set_zoom(img, 128);		/* 图片的缩放:128缩小1/2;256原尺寸;512放大2倍 */
    //    lv_img_set_angle(img, 900);		/* 顺时针方向旋转90°*/
    
        lv_obj_update_layout(img);		/* 更新图片布局信息,要在设置中心点之前调用 */
        lv_img_set_pivot(img, 0, 0);    /* 设置中心点,相对于原照片的位置 */
    }
    
    

    —-LVGL图片的数组可以使用LVGL官网TOOL->Image Converter(加载可能有点慢!!!)—-

    Color format 含义
    CF_TRUE_COLOR 存储RGB颜色
    CF_TRUE_COLOR_ALPHA 在RGB的基础上增加了不透明度

    注:如果使用vscode+ESP_IDF开发ESP32,将生成的图片C数组添加到工程后,要进行full clean,再进行build;否则会出现图片数组未定义的报错!

    (十五)色环条控件(colorwheel)

    组成部分 编程对应
    主体 LV_PART_MAIN
    旋钮 LV_PART_KNOB

    1.色环的创建

    static lv_obj_t *obj ;
    static void my_event_cb_6(lv_event_t * e)
    {
        lv_obj_t *target = lv_event_get_target(e);
        lv_obj_set_style_bg_color(obj,lv_colorwheel_get_rgb(target),LV_PART_MAIN);
    }
    
    void MY_GUI()
    {
        lv_obj_t *cw = lv_colorwheel_create(lv_scr_act(),false); /*创建色环,第二个参数为旋钮颜色跟随设置*/
        lv_obj_center(cw);
    
        lv_obj_set_style_arc_width(cw,20,LV_PART_MAIN);    /* 宽度设置 */
        lv_colorwheel_set_rgb(cw,lv_color_hex(0x00FF00));  /* 设置颜色 */
    
        lv_obj_add_event_cb(cw,my_event_cb_6,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
    
        obj = lv_obj_create(lv_scr_act());
        lv_obj_center(obj);
        lv_obj_set_style_bg_color(obj,lv_colorwheel_get_rgb(cw),LV_PART_MAIN);
    
    //    lv_colorwheel_set_mode(cw,LV_COLORWHEEL_MODE_SATURATION);  /* 色相、饱和度、透明度设置,长按时有BUG导致模式乱切换,不建议 */
        lv_colorwheel_set_mode_fixed(cw,LV_COLORWHEEL_MODE_SATURATION); /* 固定色环模式 */
    }
    

    (十六)按钮矩阵控件(Btnmatrix)

    组成部分 编程对应
    主体 LV_PART_MAIN
    按钮 LV_PART_ITEMS

    1.按钮矩阵的创建(示例)

    lv_obj_t *label_input;
    LV_IMG_DECLARE(user);
    
    static lv_point_t points[]={{0,20},{0,240}};
    
    /*设置按钮数量和文本*/
    static const char *map[] = { "1", "2", "3", "\n",
                                  "4", "5", "6", "\n",
                                  "7", "8", "9", "\n",
                                  "#", "0", "%", "" };	/* 定义按钮数组,最后一个元素必须为空 */
    
    static void my_event_cb_7(lv_event_t * e)
    {
        uint8_t id; /*索引*/
        lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
        lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
    
        if(code == LV_EVENT_PRESSED)
        {
            id = lv_btnmatrix_get_selected_btn(target);
            lv_label_set_text(label_input,lv_btnmatrix_get_btn_text(target,id));
            lv_obj_align(label_input,LV_ALIGN_CENTER,0,0);
        }
    }
    
    void MY_GUI()
    {
        /*用户图标的创建*/
        lv_obj_t *img = lv_img_create(lv_scr_act());               /*创建图片对象*/
        lv_img_set_src(img,&user);                                 /*设置图片来源*/
        lv_img_set_zoom(img,128);                                  /*设置图片缩放比*/
        lv_obj_align(img,LV_ALIGN_CENTER,-140,-60);                  /*设置图片位置*/
        lv_obj_set_style_img_recolor(img,lv_color_hex(0xf2f2f2),0);/*设置重染色*/
        lv_obj_set_style_img_recolor_opa(img,100,0);               /*设置染色透明度*/
    
        /*用户标签的创建*/
        lv_obj_t *label = lv_label_create(lv_scr_act());                      /*创建标签对象*/
        lv_label_set_text(label,"USER");                                      /*设置标签文本*/
        lv_obj_set_style_text_font(label,&lv_font_montserrat_30,LV_PART_MAIN);/*设置标签文本字体*/
        lv_obj_set_style_text_align(label,LV_TEXT_ALIGN_CENTER,LV_PART_MAIN); /*设置标签内容位置*/
        lv_obj_align_to(label,img,LV_ALIGN_OUT_BOTTOM_MID,0,-20);              /*设置标签位置*/
    
        /*输入框背景的创建*/
        lv_obj_t *obj_input = lv_obj_create(lv_scr_act());                  /*创建基础对象*/
        lv_obj_set_size(obj_input,160,30);                                  /*设置大小*/
        lv_obj_align_to(obj_input,label,LV_ALIGN_OUT_BOTTOM_MID,0,16);      /*设置对齐位置*/
        lv_obj_set_style_bg_color(obj_input,lv_color_hex(0xcccccc),0);      /*设置背景颜色*/
        lv_obj_set_style_bg_opa(obj_input,150,0);                           /*设置透明度*/
        lv_obj_set_style_border_width(obj_input,0,0);                       /*去除边框*/
        lv_obj_set_style_radius(obj_input,20,0);                            /*设置圆角*/
        lv_obj_remove_style(obj_input,NULL,LV_PART_SCROLLBAR);              /*移除滚动模式*/
    
        /*输入框标签,用作显示*/
        label_input = lv_label_create(obj_input);                         /*创建标签对象*/
        lv_label_set_text(label_input," ");                                         /*设置文本为空*/
        lv_obj_set_style_text_font(label_input,&lv_font_montserrat_30,LV_PART_MAIN);/*设置字体*/
        lv_obj_set_style_text_align(label_input,LV_TEXT_ALIGN_CENTER,LV_PART_MAIN); /*设置标签内容位置*/
        lv_obj_align_to(label_input,img,LV_ALIGN_OUT_BOTTOM_MID,0,10);              /*设置标签位置*/
    
        /*分隔线*/
        lv_obj_t *line = lv_line_create(lv_scr_act());              /*创建线*/
        lv_line_set_points(line,points,2);                          /*画线坐标*/
        lv_obj_align(line,LV_ALIGN_CENTER,0,-20);                   /*线位置*/
        lv_obj_set_style_line_color(line,lv_color_hex(0xcdcdcd),0); /*线颜色*/
    
    
        /*按钮矩阵*/
        lv_obj_t  *btnm = lv_btnmatrix_create(lv_scr_act());/* 创建按钮矩阵 */
        lv_obj_set_size(btnm,220,280);                      /* 设置大小 */
        lv_btnmatrix_set_map(btnm, map);					/* 设置按钮 */
        lv_obj_align(btnm,LV_ALIGN_RIGHT_MID,0,0);          /* 位置设置 */
        lv_obj_set_style_text_font(btnm,&lv_font_montserrat_30,LV_PART_ITEMS);/* 按钮显示字体设置 */
    
        /*优化矩阵界面*/
        lv_obj_set_style_border_width(btnm,0,LV_PART_MAIN); /* 去除主体边框 */
        lv_obj_set_style_bg_opa(btnm,0,LV_PART_MAIN);       /* 设置主体背景透明度 */
        lv_obj_set_style_bg_opa(btnm,0,LV_PART_ITEMS);      /* 设置按钮背景透明度 */
        lv_obj_set_style_shadow_opa(btnm,0,LV_PART_ITEMS);  /* 去除按钮阴影 */
        lv_obj_add_event_cb(btnm,my_event_cb_7,LV_EVENT_PRESSED,NULL);/* 按钮矩阵回调 */
    
    //    lv_btnmatrix_set_btn_width(btnm,2,2);                                                      /* 索引 (id) 从0开始,宽度1~7 ( 默认为1 ) */
    //    lv_btnmatrix_set_one_checked(btnm,true);                                                   /*设置单次选中属性*/
    //    lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_RECOLOR);	                         /* 设置单个按钮属性 */
    //    lv_btnmatrix_clear_btn_ctrl(btnm, id, LV_BTNMATRIX_CTRL_...);	                             /* 清除单个按钮属性 */
    //    lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE|LV_BTNMATRIX_CTRL_RECOLOR);/* 设置所有按钮属性 */
    //    lv_btnmatrix_clear_btn_ctrl_all(btnm,LV_BTNMATRIX_CTRL_..);                                /* 清除所有按钮属性 */
    }
    

    效果图

    (十七)文本区域控件(Textarea)

    组成部分 编程对应
    主体 LV_PART_MAIN
    滚动条 LV_PART_SCROLLBAR
    所选文本 LV_PART_SELECTED
    光标 LV_PART_CURSOR
    占位符 TEXTAREA_PLACEHOLDER

    1.文本的创建(示例)

    lv_obj_t *keyboard;
    
    static void my_event_cb_11(lv_event_t * e)
    {
    	 lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
    
    	if(code == LV_EVENT_FOCUSED)
    	{
    		lv_keyboard_set_textarea(keyboard,target);
    	}
    	else if(code == LV_EVENT_VALUE_CHANGED)
    	{
    		const char *text = lv_textarea_get_text(target);
    	}
    }
    
    static void my_event_cb_21(lv_event_t * e)
    {
    	 lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
    
    		if(code == LV_EVENT_FOCUSED)
    	{
    		lv_keyboard_set_textarea(keyboard,target);
    	}
    	else if(code == LV_EVENT_VALUE_CHANGED)
    	{
    		const char *text = lv_textarea_get_text(target);
    	}
    }
    
    
    void MY_GUI()
    {
        lv_obj_t *ta1 = lv_textarea_create(lv_scr_act());
        lv_obj_t *ta2 = lv_textarea_create(lv_scr_act());
        lv_obj_align(ta1,LV_ALIGN_TOP_MID,0,10);
        lv_obj_align(ta2,LV_ALIGN_TOP_MID,0,60);
    
        lv_textarea_set_one_line(ta1, true);
        lv_textarea_set_one_line(ta2, true);
    
        keyboard = lv_keyboard_create(lv_scr_act());	  /* 创建键盘部件 */
    
        lv_obj_add_event_cb(ta1,my_event_cb_11,LV_EVENT_ALL,NULL);/* 回调 */
        lv_obj_add_event_cb(ta2,my_event_cb_21,LV_EVENT_ALL,NULL);/* 回调 */
    
    //    lv_textarea_add_char(ta, 'A');					/* 添加一个字符到当前光标处 */
    //    lv_textarea_add_text(ta, "BCDEF"); 				/* 添加字符串到当前光标处 */
    //
    //    lv_obj_t *keyboard = lv_keyboard_create(lv_scr_act());	/* 创建键盘部件 */
    //    lv_keyboard_set_textarea(keyboard, ta);			        /* 关联键盘和文本区域部件 */
    //
    //    lv_textarea_set_cursor_pos(ta,LV_TEXTAREA_CURSOR_LAST);
    //
    //    lv_textarea_del_char(ta);							/* 删除光标左侧的一个字符 */
    //    lv_textarea_del_char_forward(ta);					/* 删除光标右侧的一个字符 */
    
    //    lv_textarea_set_one_line(ta, true);				/* 单行模式,超过内容则形成滚动条 */
    //    lv_textarea_set_password_mode(ta, true);			/* 密码模式(1.5s后隐藏输入的内容) */
    //    lv_textarea_set_password_show_time(ta, 100);		/* 密码显示时间 */
    //    lv_textarea_set_accepted_chars(ta,"0123456789");	/* 限制接收的字符 */
    //    lv_textarea_set_max_length(ta,6);			 		/* 限制字符长度 */
    //    lv_textarea_set_placeholder_text(ta, "password");	/* 提示输入密码 */
    //    const char *txt = lv_textarea_get_text(ta);		/* 获取文本框文本 */
    //    strcmp(const char *s1,const char *s2);			/* 当s1=s2时,返回0 */
    }
    
    

    效果图

    (十八)键盘控件(Keyboard)

    组成部分 编程对应
    主体 LV_PART_MAIN
    按钮 LV_PART_ITEMS

    1.键盘的创建(示例)

    static void my_event_cb_11(lv_event_t * e)
    {
    	 lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
    
    	if(code == LV_EVENT_FOCUSED)
    	{
    		lv_keyboard_set_textarea(keyboard,target);
    	}
    	else if(code == LV_EVENT_VALUE_CHANGED)
    	{
    		const char *text = lv_textarea_get_text(target);
    	}
    }
    
    static void my_event_cb_21(lv_event_t * e)
    {
    	 lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
    
    		if(code == LV_EVENT_FOCUSED)
    	{
    		lv_keyboard_set_textarea(keyboard,target);
    	}
    	else if(code == LV_EVENT_VALUE_CHANGED)
    	{
    		const char *text = lv_textarea_get_text(target);
    	}
    }
    
    void MY_GUI()
    {
    
        lv_obj_t *kb = lv_keyboard_create(lv_scr_act());
        lv_obj_t *ta = lv_textarea_create(lv_scr_act());				/* 创建文本区域部件 */
    
        lv_keyboard_set_textarea(kb, ta);						/* 关联键盘和文本区域部件 */
    
        lv_keyboard_set_popovers(kb, true);						/* 允许按键弹窗提示 */
    
        lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);		/* 数字键盘模式,小写字母模式,大写字母模式,特殊字符模式,数字键盘模式  */
    }
    

    (十九)图片按钮控件(Imgbtn)

    组成部分 编程对应
    主体 LV_PART_MAIN

    1.图片按钮的创建(示例)

    LV_IMG_DECLARE(Address);
    LV_IMG_DECLARE(Close);
    LV_IMG_DECLARE(Phone);
    
    static lv_point_t points_imgbtn[]={{0,0},{0,150}};
    
    static void my_event_cb_Address(lv_event_t * e)
    {
       static  uint8_t flag=0;
       lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
       if(code == LV_EVENT_CLICKED)
       {
           if(flag == 0)
           {
               lv_obj_set_style_img_recolor(target,lv_color_hex(0x00BFFF),LV_STATE_DEFAULT);
        	   lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
               flag=1;
           }
           else
           {
               lv_obj_set_style_img_recolor(target,lv_color_hex(0x000000),LV_STATE_DEFAULT);
       		   lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
               flag=0;
           }
       }
    }
    
    static void my_event_cb_Close(lv_event_t * e)
    {
       static  uint8_t flag=0;
       lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
       if(code == LV_EVENT_CLICKED)
       {
           if(flag == 0)
           {
               lv_obj_set_style_img_recolor(target,lv_color_hex(0xff0000),LV_STATE_DEFAULT);
        	   lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
               flag=1;
           }
           else
           {
               lv_obj_set_style_img_recolor(target,lv_color_hex(0x000000),LV_STATE_DEFAULT);
       		   lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
               flag=0;
           }
       }
    }
    static void my_event_cb_Phone(lv_event_t * e)
    {
       static  uint8_t flag=0;
       lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
       if(code == LV_EVENT_CLICKED)
       {
           if(flag == 0)
           {
               lv_obj_set_style_img_recolor(target,lv_color_hex(0x00EE76),LV_STATE_DEFAULT);
        	   lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
               flag=1;
           }
           else
           {
               lv_obj_set_style_img_recolor(target,lv_color_hex(0x000000),LV_STATE_DEFAULT);
       		   lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
               flag=0;
           }
       }
    }
    
    
    void MY_GUI()
    {
    	lv_obj_t *obj = lv_obj_create(lv_scr_act());
    	lv_obj_set_size(obj,420,200);
    	lv_obj_align(obj,LV_ALIGN_CENTER,0,0);
    
    	lv_obj_t  *imgbtn1 = lv_imgbtn_create(obj);
        lv_imgbtn_set_src(imgbtn1,LV_IMGBTN_STATE_RELEASED,NULL,&Address,NULL);  /* 设置某个状态的图片源 */
        lv_obj_set_size(imgbtn1,64,64);	                                  /* 设置图片按钮大小 */
    	lv_obj_align(imgbtn1,LV_ALIGN_LEFT_MID,0,0);
        lv_obj_add_event_cb(imgbtn1,my_event_cb_Address,LV_EVENT_CLICKED,NULL);
    
        lv_obj_t  *label_Address = lv_label_create(obj);                         /*创建标签对象*/
        lv_label_set_text(label_Address,"Address");                                         /*设置文本为空*/
        lv_obj_align_to(label_Address,imgbtn1,LV_ALIGN_OUT_BOTTOM_MID,0,10);              /*设置标签位置*/
    
    
    	lv_obj_t  *imgbtn2 = lv_imgbtn_create(obj);
        lv_imgbtn_set_src(imgbtn2,LV_IMGBTN_STATE_RELEASED,NULL,&Close,NULL);  /* 设置某个状态的图片源 */
        lv_obj_set_size(imgbtn2,64,64);	                                  /* 设置图片按钮大小 */
    	lv_obj_align(imgbtn2,LV_ALIGN_CENTER,0,0);
        lv_obj_add_event_cb(imgbtn2,my_event_cb_Close,LV_EVENT_CLICKED,NULL);
    
        lv_obj_t  *label_Close = lv_label_create(obj);                         /*创建标签对象*/
        lv_label_set_text(label_Close,"Close");                                         /*设置文本为空*/
        lv_obj_align_to(label_Close,imgbtn2,LV_ALIGN_OUT_BOTTOM_MID,0,10);              /*设置标签位置*/
    
    
    	lv_obj_t  *imgbtn3 = lv_imgbtn_create(obj);
        lv_imgbtn_set_src(imgbtn3,LV_IMGBTN_STATE_RELEASED,NULL,&Phone,NULL);  /* 设置某个状态的图片源 */
        lv_obj_set_size(imgbtn3,64,64);	                                  	/* 设置图片按钮大小 */
    	lv_obj_align(imgbtn3,LV_ALIGN_RIGHT_MID,0,0);
        lv_obj_add_event_cb(imgbtn3,my_event_cb_Phone,LV_EVENT_CLICKED,NULL);
    
        lv_obj_t  *label_Phone = lv_label_create(obj);                         /*创建标签对象*/
        lv_label_set_text(label_Phone,"Phone");                                         /*设置文本为空*/
        lv_obj_align_to(label_Phone,imgbtn3,LV_ALIGN_OUT_BOTTOM_MID,0,10);              /*设置标签位置*/
    
       /*分隔线*/
       lv_obj_t *line1 = lv_line_create(obj);             		   /*创建线*/
       lv_line_set_points(line1,points_imgbtn,2);                   /*画线坐标*/
       lv_obj_align(line1,LV_ALIGN_CENTER,-90,0);                   /*线位置*/
       lv_obj_set_style_line_color(line1,lv_color_hex(0xcdcdcd),0); /*线颜色*/
    
       lv_obj_t *line2 = lv_line_create(obj);             		   /*创建线*/
       lv_line_set_points(line2,points_imgbtn,2);                   /*画线坐标*/
       lv_obj_align(line2,LV_ALIGN_CENTER,90,0);                   /*线位置*/
       lv_obj_set_style_line_color(line2,lv_color_hex(0xcdcdcd),0); /*线颜色*/
    
    

    效果图

    (二十)选项卡控件(Tabview)

    组成部分 编程对应
    主体 lv_obj
    按钮 lv_btnmatrix

    1.选项卡的创建(示例)

        lv_obj_t *tabview = lv_tabview_create(lv_scr_act(),LV_DIR_TOP,50);  /*创建选项卡*/
        //lv_obj_set_style_text_font(tabview,font,LV_STATE_DEFAULT);          /*设置字体*/
    
        lv_obj_t *tab1 = lv_tabview_add_tab(tabview,"Mon");      /*添加选项卡1*/
        lv_obj_t *tab2 = lv_tabview_add_tab(tabview,"Tue");     /*添加选项卡2*/
        lv_obj_t *tab3 = lv_tabview_add_tab(tabview,"Wed");   /*添加选项卡3*/
        lv_obj_t *tab4 = lv_tabview_add_tab(tabview,"Thu");    /*添加选项卡4*/
        lv_obj_t *tab5 = lv_tabview_add_tab(tabview,"Fri");      /*添加选项卡5*/
        lv_obj_t *tab6 = lv_tabview_add_tab(tabview,"Sat");    /*添加选项卡6*/
        lv_obj_t *tab7 = lv_tabview_add_tab(tabview,"Sun");      /*添加选项卡7*/
    
    
        lv_obj_t *label1 = lv_textarea_create(tab1);
        lv_textarea_set_text(label1,"I will not make the same mistakes that you did I will not let myself cause my heart so much misery");
        lv_obj_set_align(label1,LV_ALIGN_CENTER);
    
        lv_obj_t *label2 = lv_textarea_create(tab2);
        lv_textarea_set_text(label2,"I will not break the way you did you fell so hard");
        lv_obj_set_align(label2,LV_ALIGN_CENTER);
    
        lv_obj_t *label3 = lv_textarea_create(tab3);
        lv_textarea_set_text(label3,"I've learned the hard way to never let it get that far");
        lv_obj_set_align(label3,LV_ALIGN_CENTER);
    
        lv_obj_t *label4 = lv_textarea_create(tab4);
        lv_textarea_set_text(label4,"Because of you I never stray too far from the sidewalk");
        lv_obj_set_align(label4,LV_ALIGN_CENTER);
    
        lv_obj_t *label5 = lv_textarea_create(tab5);
        lv_textarea_set_text(label5,"Because of you I learned to play on the safe side so I don't get hurt");
        lv_obj_set_align(label5,LV_ALIGN_CENTER);
    
        lv_obj_t *label6 = lv_textarea_create(tab6);
        lv_textarea_set_text(label6,"Because of you I find it hard to trust not only me, but everyone around me");
        lv_obj_set_align(label6,LV_ALIGN_CENTER);
    
        lv_obj_t *label7 = lv_textarea_create(tab7);
        lv_textarea_set_text(label7,"Because of you I am afraid I lose my way");
        lv_obj_set_align(label7,LV_ALIGN_CENTER);
    
        /*界面优化*/
        lv_obj_t  *btn = lv_tabview_get_tab_btns(tabview);  /*获取选项卡按钮部分*/
    
        /*未选中的按钮*/
        lv_obj_set_style_bg_color(btn,lv_color_hex(0xb7472a),LV_PART_ITEMS|LV_STATE_DEFAULT);   /*设置按钮背景颜色*/
        lv_obj_set_style_bg_opa(btn,200,LV_PART_ITEMS|LV_STATE_DEFAULT);                       /*设置按钮背景透明度*/
        lv_obj_set_style_text_color(btn,lv_color_hex(0xf3f3f3),LV_PART_ITEMS|LV_STATE_DEFAULT);/*设置按钮文本颜色*/
    
        /*选中的按钮*/
        lv_obj_set_style_bg_color(btn,lv_color_hex(0xe1e1e1),LV_PART_ITEMS|LV_STATE_CHECKED);   /*设置按钮背景颜色*/
        lv_obj_set_style_bg_opa(btn,200,LV_PART_ITEMS|LV_STATE_CHECKED);                       /*设置按钮背景透明度*/
        lv_obj_set_style_text_color(btn,lv_color_hex(0xb7472a),LV_PART_ITEMS|LV_STATE_CHECKED); /*设置按钮文本颜色*/
        lv_obj_set_style_border_width(btn,5,LV_PART_ITEMS|LV_STATE_CHECKED);                    /*设置选中按钮边框宽度*/
    
        /*主体*/
        lv_obj_t *obj = lv_tabview_get_content(tabview);
        lv_obj_set_style_bg_color(obj,lv_color_hex(0xffffff),LV_STATE_DEFAULT);
        lv_obj_set_style_bg_opa(obj,255,LV_STATE_DEFAULT);
    
        lv_tabview_set_act(tabview,0,LV_ANIM_OFF);    /* 索引从0开始,关闭动画 */
    }
    

    效果图

    (二十一)平铺视图控件(Tileview)

    组成部分 编程对应
    主体 LV_PART_MAIN
    按钮 LV_PART_SCROLLBAR

    1.平铺视图的创建(示例)

      lv_obj_t  *tileview = lv_tileview_create( lv_scr_act() );
    
        lv_obj_set_size(tileview,480,320);
    
        lv_obj_t *tile1 = lv_tileview_add_tile( tileview, 0, 0, LV_DIR_RIGHT );              /*添加页面*/
        lv_obj_t *tile2 = lv_tileview_add_tile( tileview, 1, 0, LV_DIR_LEFT|LV_DIR_RIGHT );  /*添加页面*/
        lv_obj_t *tile3 = lv_tileview_add_tile( tileview, 2, 0, LV_DIR_LEFT );               /*添加页面*/
    
        lv_obj_t *label_1 = lv_label_create(tile1);                  /*创建标签*/
        lv_label_set_text(label_1,"Page_1");                         /*添加标签文本*/
    //    lv_obj_set_style_text_font(label_1,font,LV_STATE_DEFAULT); /*设置标签字体*/
        lv_obj_center(label_1);                                       /*对齐*/
    
        lv_obj_t *label_2 = lv_label_create(tile2);                /*创建标签*/
        lv_label_set_text(label_2,"Page_2");                       /*添加标签文本*/
    //    lv_obj_set_style_text_font(label_1,font,LV_STATE_DEFAULT); /*设置标签字体*/
        lv_obj_center(label_2);                                    /*对齐*/
    
        lv_obj_t *label_3 = lv_label_create(tile3);                /*创建标签*/
        lv_label_set_text(label_3,"Page_3");                       /*添加标签文本*/
    //    lv_obj_set_style_text_font(label_3,font,LV_STATE_DEFAULT); /*设置标签字体*/
        lv_obj_center(label_3);                                    /*对齐*/
    
        lv_obj_remove_style(tileview,NULL,LV_PART_SCROLLBAR);       /*移除滚动条*/
    
        /*状态栏创建*/
        lv_obj_t *label_left = lv_label_create(lv_scr_act());
        lv_label_set_text(label_left,"AM 5:50");                       /*添加标签文本*/
        lv_obj_align(label_left,LV_ALIGN_TOP_LEFT,10,10);
    
        lv_obj_t *label_right = lv_label_create(lv_scr_act());
        lv_label_set_text(label_right,LV_SYMBOL_WIFI " 95% "  LV_SYMBOL_BATTERY_3);    /*添加标签文本*/
        lv_obj_align(label_right,LV_ALIGN_TOP_RIGHT,-10,10);
    
    //    lv_obj_update_layout( tileview );							/* 更新参数 */
    //    lv_obj_set_tile( tileview, tile2, LV_ANIM_OFF );			/* 根据页面对象设置 */
        lv_obj_set_tile_id( tileview, 0, 0, LV_ANIM_OFF );			/* 根据页面行列设置 */
    

    效果图

    (二十二)窗口部件控件(Win)

    组成部分 编程对应
    头部 Header
    主体 Content

    1.窗口部件的创建(示例)

    lv_obj_t *win;
    static void btn_event_cb(lv_event_t * e)
    {
       lv_obj_t *target = lv_event_get_target(e);      /* 获取触发源 */
       lv_event_code_t code = lv_event_get_code(e);    /* 获取触发事件 */
       if(code == LV_EVENT_CLICKED)
       {
           lv_obj_add_flag(win,LV_OBJ_FLAG_HIDDEN);
       }
    }
    
    void MY_GUI()
    {
        win = lv_win_create(lv_scr_act(),30); 					/*创建窗口部件*/
        lv_obj_set_size(win,300,200);                   		/*设置大小*/
        lv_obj_center(win);                             		/*位置居中*/
        lv_obj_set_style_border_width(win,1,LV_STATE_DEFAULT);  /*边框大小*/
        lv_obj_set_style_border_color(win,lv_color_hex(0x8a8a8a),LV_STATE_DEFAULT);/*边框颜色*/
        lv_obj_set_style_border_opa(win,100,LV_STATE_DEFAULT);	/*边框透明度设置*/
        lv_obj_set_style_radius(win,10,LV_STATE_DEFAULT);		/*圆角设置*/
    
        lv_obj_t *btn_set = lv_win_add_btn(win,LV_SYMBOL_SETTINGS ,30); /*添加头部按钮*/
        lv_obj_set_style_bg_opa(btn_set,0,LV_STATE_DEFAULT);			/*背景透明度设置*/
        lv_obj_set_style_shadow_width(btn_set,0,LV_STATE_DEFAULT);		/*阴影宽度设置*/
        lv_obj_set_style_text_color(btn_set,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*设置文本颜色*/
    
        /*标题*/
        lv_obj_t *title = lv_win_add_title(win,"Setting");				/*添加头部文本*/
    //    lv_obj_set_style_text_font(title,);
    
        /*右侧按钮*/
        lv_obj_t *bt_close = lv_win_add_btn(win,LV_SYMBOL_CLOSE,30);	/*创建按钮*/
        lv_obj_set_style_bg_opa(bt_close,0,LV_STATE_DEFAULT);			/*背景透明度设置*/
        lv_obj_set_style_shadow_width(bt_close,0,LV_STATE_DEFAULT);		/*阴影宽度设置*/
        lv_obj_set_style_text_color(bt_close,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*设置默认文本颜色*/
        lv_obj_set_style_text_color(bt_close,lv_color_hex(0xff0000),LV_STATE_PRESSED);/*设置按下文本颜色*/
        lv_obj_add_event_cb(bt_close,btn_event_cb,LV_EVENT_CLICKED,NULL);/*回调函数*/
    
    
        /*主体背景*/
        lv_obj_t *content = lv_win_get_content(win);  /*获取主体*/
        lv_obj_set_style_bg_color(content,lv_color_hex(0xffffff),LV_STATE_DEFAULT);/*设置背景颜色*/
    
        /*音乐音量滑块*/
        lv_obj_t *slider_music = lv_slider_create(content);				/*创建滑块*/
        lv_obj_set_size(slider_music,200,20);							/*设置大小*/
        lv_obj_align(slider_music,LV_ALIGN_CENTER,0,-20);				/*设置位置*/
        lv_slider_set_value(slider_music,50,LV_ANIM_OFF);				/*设置值,关闭动画*/
        lv_obj_set_style_bg_color(slider_music,lv_color_hex(0x787c78),LV_PART_MAIN);/*设置默认颜色*/
        lv_obj_set_style_bg_color(slider_music,lv_color_hex(0x00BFFF),LV_PART_INDICATOR);/*设置指示器颜色*/
        lv_obj_remove_style(slider_music,NULL,LV_PART_KNOB);			/*移除控制器*/
    
        /*音乐音量图标*/
        lv_obj_t *label_music = lv_label_create(content);				/*创建标签*/
        lv_label_set_text(label_music,LV_SYMBOL_AUDIO);					/*设置标签文本*/
        lv_obj_align_to(label_music,slider_music,LV_ALIGN_OUT_LEFT_MID,-5,0);/*设置对齐*/
    
        /*闹钟音量滑块*/
        lv_obj_t *slider_clock = lv_slider_create(content);				/*创建滑块*/
        lv_obj_set_size(slider_clock,200,20);							/*设置大小*/
        lv_obj_align(slider_clock,LV_ALIGN_CENTER,0,20);				/*设置位置*/
        lv_slider_set_value(slider_clock,50,LV_ANIM_OFF);				/*设置值,关闭动画*/
        lv_obj_set_style_bg_color(slider_clock,lv_color_hex(0x787c78),LV_PART_MAIN);/*设置默认颜色*/
        lv_obj_set_style_bg_color(slider_clock,lv_color_hex(0x00BFFF),LV_PART_INDICATOR);*设置指示器颜色*/
        lv_obj_remove_style(slider_clock,NULL,LV_PART_KNOB);			/*移除控制器*/
    
        /*闹钟音量图标*/
        lv_obj_t *label_clock = lv_label_create(content);				/*创建标签*/
        lv_label_set_text(label_clock,LV_SYMBOL_BELL);					/*设置标签文本*/
        lv_obj_align_to(label_clock,slider_clock,LV_ALIGN_OUT_LEFT_MID,-5,0);/*设置对齐*/
    }
    

    效果图

    (二十三)消息框控件(Msgbox)

    组成部分 编程对应
    主体 obj
    标题 title
    关闭按钮 close_btn
    内容 content
    按钮矩阵 btnmatrix

    1.消息框的创建(示例)

    lv_obj_t *slider_label;
    lv_obj_t *msgbox;
    
    static void slider_sound_event_cb(lv_event_t * e)
    {
        static uint8_t flag=0;
        lv_obj_t *target = lv_event_get_current_target(e);    /* 获取触发源,这里特别注意和msgbox常规获取函数不同 */
        lv_event_code_t code = lv_event_get_code(e);          /* 获取触发事件 */
    
        if(code == LV_EVENT_VALUE_CHANGED)
        {
            lv_label_set_text_fmt(slider_label,"%d%%",lv_slider_get_value(target)); /*获取当前值,更新音量百分比*/
    
            if(lv_slider_get_value(target) >= 80 && flag == 0)
            {
                lv_obj_clear_flag(msgbox,LV_OBJ_FLAG_HIDDEN);  /*清除消息框隐藏属性,出现弹出提示*/
                flag = 1;
            }
            else if(lv_slider_get_value(target) < 80)
            {
                flag = 0;
            }
        }
    }
    
    static void msgbox_btn_event_cb(lv_event_t * e)
    {
        lv_obj_t *target = lv_event_get_current_target(e);    /* 获取触发源,这里特别注意和msgbox常规获取函数不同 */
        lv_event_code_t code = lv_event_get_code(e);          /* 获取触发事件 */
    
         if(code == LV_EVENT_CLICKED)
        {
            lv_obj_add_flag(msgbox,LV_OBJ_FLAG_HIDDEN);
        }
    }
    
    void MY_GUI()
    {
        static const char *btns[] = {" "," ","OK"," "};
    
        /*音乐音量滑块*/
        lv_obj_t *slider_sound = lv_slider_create(lv_scr_act()); /*创建滑块*/
        lv_obj_set_size(slider_sound,200,15);                    /*设置大小*/
        lv_obj_align(slider_sound,LV_ALIGN_CENTER,0,0);          /*设置位置*/
        lv_slider_set_value(slider_sound,50,LV_ANIM_OFF);        /*设置值*/
        lv_obj_add_event_cb(slider_sound,slider_sound_event_cb,LV_EVENT_VALUE_CHANGED,NULL);/*回调函数*/
    
        /*百分比标签*/
        slider_label = lv_label_create(lv_scr_act());            /*创建标签*/
        lv_label_set_text(slider_label,"50%");                   /*设置内容*/
        lv_obj_align_to(slider_label,slider_sound,LV_ALIGN_OUT_RIGHT_MID,5,0); /*设置位置*/
    
        /*音量图标*/
        lv_obj_t *sound_label = lv_label_create(lv_scr_act());
        lv_label_set_text(sound_label,LV_SYMBOL_VOLUME_MAX);
        lv_obj_align_to(sound_label,slider_sound,LV_ALIGN_OUT_LEFT_MID,-5,0);
    
        /*消息框*/
        msgbox = lv_msgbox_create(lv_scr_act(),LV_SYMBOL_WARNING "Notice","Excessive volume may damage hearing.",btns,false);
        lv_obj_set_size(msgbox,250,150);
        lv_obj_center(msgbox);
        lv_obj_set_style_border_width(msgbox,0,LV_STATE_DEFAULT);                     /*边框大小*/
        lv_obj_set_style_shadow_width(msgbox,20,LV_STATE_DEFAULT);                    /*阴影宽度*/
        lv_obj_set_style_shadow_color(msgbox,lv_color_hex(0xa9a9a9),LV_STATE_DEFAULT);/*边框颜色*/
        lv_obj_set_style_pad_top(msgbox,18,LV_STATE_DEFAULT);                         /*设置顶部填充*/
        lv_obj_set_style_pad_left(msgbox,20,LV_STATE_DEFAULT);                        /*设置左侧填充*/
    //    lv_obj_add_event_cb(msgbox,slider_sound_event_cb,LV_EVENT_CLICKED,NULL);      /*回调函数*/
    
        /*消息框标题*/
        lv_obj_t *title = lv_msgbox_get_title(msgbox);                                /*获取标题部分*/
        lv_obj_set_style_text_color(title,lv_color_hex(0xff0000),LV_STATE_DEFAULT);   /*设置文本颜色*/
    
        /*消息框主体*/
        lv_obj_t *content = lv_msgbox_get_content(msgbox);                            /*获取主体部分*/
        lv_obj_set_style_text_color(content,lv_color_hex(0x6c6c6c),LV_STATE_DEFAULT); /*设置文本颜色*/
        lv_obj_set_style_pad_top(content,15,LV_STATE_DEFAULT);                        /*设置顶部填充*/
    
        /*消息框按钮*/
        lv_obj_t *btn  = lv_msgbox_get_btns(msgbox);                                  /*获取消息框按钮*/
        lv_obj_set_style_bg_opa(btn,0,LV_PART_ITEMS);                                 /*设置透明度*/
        lv_obj_set_style_shadow_width(btn,0,LV_PART_ITEMS);                           /*设置阴影宽度*/
        lv_obj_set_style_text_color(btn,lv_color_hex(0x2271df),LV_PART_ITEMS);        /*设置文本颜色*/
        lv_obj_set_style_text_color(btn,lv_color_hex(0xff0000),LV_PART_ITEMS|LV_STATE_PRESSED);/*设置设置文本颜色*/
        lv_obj_add_event_cb(btn,msgbox_btn_event_cb,LV_EVENT_CLICKED,NULL);          /*回调函数*/
    
        lv_obj_add_flag(msgbox,LV_OBJ_FLAG_HIDDEN);                                  /*隐藏msgbox*/
    }
    
    

    效果图

    (二十四)微调器控件(Spinbox)

    组成部分 编程对应
    主体 LV_PART_MAIN
    光标 LV_PART_CURSOR

    1.微调器的创建(示例)

    lv_obj_t *spinbox;
    static void spinbox_btnadd_event_cb(lv_event_t * e)
    {
        lv_event_code_t code = lv_event_get_code(e);          /* 获取触发事件 */
        if(code == LV_EVENT_CLICKED)
        {
            lv_spinbox_increment(spinbox);   /*递增*/
        }
    }
    static void spinbox_btndec_event_cb(lv_event_t * e)
    {
        lv_event_code_t code = lv_event_get_code(e);          /* 获取触发事件 */
        if(code == LV_EVENT_CLICKED)
        {
            lv_spinbox_decrement(spinbox);   /*递减*/
        }
    }
    void MY_GUI()
    {
        spinbox = lv_spinbox_create(lv_scr_act());          /*创建微调器*/
        lv_obj_center(spinbox);                             /*设置位置*/
        lv_spinbox_set_value(spinbox,0);                    /*设置值*/
        lv_spinbox_set_digit_format(spinbox, 4, 2); 		/* 设置数字位数、小数点位置 */
        lv_spinbox_set_pos(spinbox, 1);						/* 设置光标位置 */
    
        lv_spinbox_set_step(spinbox,1);                     /*设置步进值*/
        lv_spinbox_set_range(spinbox,-1000,1000);           /*设置位置*/
    
        lv_obj_t *btn_add = lv_btn_create(lv_scr_act());                           /*创建按钮*/
        lv_obj_align_to(btn_add,spinbox,LV_ALIGN_OUT_RIGHT_MID,5,0);               /*设置位置*/
        lv_obj_set_style_bg_img_src(btn_add,LV_SYMBOL_PLUS,LV_PART_MAIN);          /*设置背景图标*/
        lv_obj_add_event_cb(btn_add,spinbox_btnadd_event_cb,LV_EVENT_CLICKED,NULL);/*回调函数*/
    
        lv_obj_t *btn_dec = lv_btn_create(lv_scr_act());                           /*创建按钮*/
        lv_obj_align_to(btn_dec,spinbox,LV_ALIGN_OUT_LEFT_MID,-5,0);               /*设置位置*/
        lv_obj_set_style_bg_img_src(btn_dec,LV_SYMBOL_MINUS,LV_PART_MAIN);         /*设置背景图标*/
        lv_obj_add_event_cb(btn_dec,spinbox_btndec_event_cb,LV_EVENT_CLICKED,NULL);/*回调函数*/
    
    

    效果图

    (二十五)表格控件(Table)

    组成部分 编程对应
    主体 LV_PART_MAIN
    单元格 LV_PART_ITEMS

    1.表格的创建(示例)

    void MY_GUI()
    {
        /*表格*/
        lv_obj_t *table = lv_table_create(lv_scr_act()); /*创建表格*/
        lv_obj_set_height(table,160);                    /*设置表格高度*/
        lv_obj_center(table);                            /*设置位置*/
    
        /*标题*/
        lv_obj_t *label_title = lv_label_create(lv_scr_act());          /*创建标签*/
        lv_obj_align_to(label_title,table,LV_ALIGN_OUT_TOP_MID,-30,-5); /*设置位置*/
        lv_label_set_text(label_title,"Fruit Prices");                  /*设置内容*/
    
        /*设置第一列单元格内容*/
        lv_table_set_cell_value(table,0,0,"Fruit"); 
        lv_table_set_cell_value(table,1,0,"AAAA");
        lv_table_set_cell_value(table,2,0,"BBBB");
        lv_table_set_cell_value(table,3,0,"CCCC");
        lv_table_set_cell_value(table,4,0,"DDDD");
        lv_table_set_cell_value(table,5,0,"EEEE");
        lv_table_set_cell_value(table,6,0,"FFFF");
    
    
        /*设置第二列单元格内容*/
        lv_table_set_cell_value(table,0,1,"Prices");
        lv_table_set_cell_value(table,1,1,"$12");
        lv_table_set_cell_value(table,2,1,"$13");
        lv_table_set_cell_value(table,3,1,"$14");
        lv_table_set_cell_value(table,4,1,"$15");
        lv_table_set_cell_value(table,5,1,"$16");
        lv_table_set_cell_value(table,6,1,"$19");
    
        /*单元格宽度*/
        lv_table_set_col_width(table,0,100);  
        lv_table_set_col_width(table,1,100);
    }
    

    效果图

    (二十六)中文字库应用

    步骤 操作
    第一步 准备使用到的字体文件(TTF、OTF等格式)
    第二步 在LVGL官网使用在线字体转换工具 网址链接
    第三步 添加生成的字库到LVGL工程中,声明调用LV_FONT_DECLARE()
    字体生成工具的使用


    常规中文字库编码范围:

    文字 编码范围
    基本汉字 0x4E00-0x7FA5
    数字、拉丁字母、标点符号 0x20-0x7E
    注:转换范围越大生成字库所占内存越大,根据自己的硬件资源合理选择

    参考资料

    —–LVGL官网手册链接—–

    —–百问网LVGL参考手册链接—–

    物联沃分享整理
    物联沃-IOTWORD物联网 » 深入学习LVGL8.2的笔记分享

    发表评论