lv_obj基础对象介绍
API 接口
演示代码如下:
#include "test.h"
#include <stdio.h>
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
lv_obj_t* scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
lv_obj_t* obj1 = lv_obj_create(scr,NULL);
}
运行代码如下:
这个就是默认的对象,有默认的颜色和大小。
演示代码如下:(当点击按钮后,默认对象被删除。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_del(obj1);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
lv_obj_t* scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,200,50);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
运行效果如下:
将上面代码中的 btn1_event_cb 中的 lv_obj_del 换成 lv_obj_del_async ,演示效果是一样的。
演示代码如下:(当点击按钮后,清空所有 obj1 下的所有子对象。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
lv_style_t style1;
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_clean(obj1);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
lv_obj_t* scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置坐标
lv_obj_set_pos(obj1,50,50);
//创建一个默认对象
lv_obj_t* child1 = lv_obj_create(obj1,NULL);
//设置大小
lv_obj_set_size(child1,20,20);
//定义 lv_style_t 这种变量时要定义成静态局部变量或者定义为全局变量。
//static lv_style_t sty1;
//因为一个样式中的属性有很多
//所以这里为了避免麻烦,先从一个现成的样式中进行拷贝
//lv_style_plain_color是 LittleVGL 中自带的
lv_style_copy(&style1,&lv_style_plain_color);
//设置样式 -- 将个别需要修改的样式进行修改
//style1.body.main_color是设置背景的上半部分颜色
//style1.body.grad_color是设置背景的下半部分颜色
//这里均设置为红色
style1.body.main_color = LV_COLOR_RED;
style1.body.grad_color = LV_COLOR_RED;
lv_obj_set_style(child1,&style1);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,200,50);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
运行效果如下:
子对象的坐标原点是以父对象的原点为参考点的,如下图所示。obj1 的父对象是窗体,因此,当设定 obj1 的坐标为(50,50)是以父对象的原点为参考点的。而 child1 的父对象又是 obj1,所以尽管没有设置 child1 的坐标位置,它还是显示在了 (50,50)的位置。
2.2.6 用到的地方不多,不讲。
演示代码如下:(当点击按钮后,将 child1 的父对象从 obj1 变为 child1。注意位置的变化)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
lv_style_t style1;
lv_obj_t* scr;
lv_obj_t* child1;
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_parent(child1,scr);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置坐标
lv_obj_set_pos(obj1,50,50);
//创建一个默认对象
child1 = lv_obj_create(obj1,NULL);
//设置大小
lv_obj_set_size(child1,20,20);
//定义 lv_style_t 这种变量时要定义成静态局部变量或者定义为全局变量。
//static lv_style_t sty1;
//因为一个样式中的属性有很多
//所以这里为了避免麻烦,先从一个现成的样式中进行拷贝
//lv_style_plain_color是 LittleVGL 中自带的
lv_style_copy(&style1,&lv_style_plain_color);
//设置样式 -- 将个别需要修改的样式进行修改
//style1.body.main_color是设置背景的上半部分颜色
//style1.body.grad_color是设置背景的下半部分颜色
//这里均设置为红色
style1.body.main_color = LV_COLOR_RED;
style1.body.grad_color = LV_COLOR_RED;
lv_obj_set_style(child1,&style1);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,200,50);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
运行效果如下:
演示代码如下:(初始时 obj1 位于最前面,按键每按下一次就切换一下。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1,*obj2;
lv_obj_t* scr;
lv_style_t style1;
int flag = 0;
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
flag++;
if(flag == 1)
{
lv_obj_move_foreground(obj2);
}
if(flag == 2)
{
lv_obj_move_background(obj2);
flag = 0;
}
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
lv_style_copy(&style1,&lv_style_plain_color);
//设置样式 -- 将个别需要修改的样式进行修改
//style1.body.main_color是设置背景的上半部分颜色
//style1.body.grad_color是设置背景的下半部分颜色
//这里均设置为红色
style1.body.main_color = LV_COLOR_RED;
style1.body.grad_color = LV_COLOR_RED;
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置坐标
lv_obj_set_pos(obj1,50,50);
// 用 copy参数将 obj1 对象上的属性值复制过来创建 obj2
obj2 = lv_obj_create(scr,obj1);
lv_obj_set_style(obj2,&style1);
//初始时 obj1 位于最前面
lv_obj_move_foreground(obj1);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,200,50);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
运行效果如下:
演示代码如下:(当按键按下后,任务一被创建,然后系统每间隔 1 s 就调用一次任务一的回调函数,回调函数的内容是切换对齐方式。总共有21种对齐方式,仿照上面图片。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1,*obj2;
lv_obj_t* scr;
lv_style_t style1;
lv_task_t* task1;
// task1的回调函数 -- 注意格式
void task1_cb(lv_task_t* task)
{
static uint32_t align = 0;
if(align > LV_ALIGN_OUT_RIGHT_BOTTOM)
{
align = LV_ALIGN_CENTER;
}
lv_obj_align(obj2, obj1, align, 0,0);
align++;
}
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
task1 = lv_task_create(task1_cb, 1000, LV_TASK_PRIO_MID, NULL);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
lv_style_copy(&style1,&lv_style_plain_color);
//设置样式 -- 将个别需要修改的样式进行修改
//style1.body.main_color是设置背景的上半部分颜色
//style1.body.grad_color是设置背景的下半部分颜色
//这里均设置为红色
style1.body.main_color = LV_COLOR_RED;
style1.body.grad_color = LV_COLOR_RED;
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置大小
lv_obj_set_size(obj1,100,100);
//设置坐标
lv_obj_set_pos(obj1,80,80);
// 用 copy参数将 obj1 对象上的属性值复制过来创建 obj2
obj2 = lv_obj_create(scr,obj1);
lv_obj_set_style(obj2,&style1);
lv_obj_set_size(obj2,50,50);
lv_obj_set_pos(obj2,150,150);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,300,80);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
运行效果如下:
此外,还有偏移,偏移可设置为负数(表示反方向)。
lv_obj_align_origo 和 lv_obj_align 的对齐原理是相同的,只不过 lv_obj_align_origo 接口是以 obj 对象的中心点来跟 base 参考对象进行对齐的。
采用与上面同样的事例,只不过把函数 lv_obj_align 给替换成 lv_obj_align_origo ,来看下效果。
重复一下最后一次的对齐操作。
自动重新对齐函数,免去手动调用上面的重新对齐函数。
不讲。
演示代码如下:(当按键按下后,默认对象 obj1 和 obj2 隐藏)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1,*obj2;
lv_obj_t* scr;
lv_style_t style1;
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_hidden(obj1, true);
lv_obj_set_hidden(obj2, true);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
lv_style_copy(&style1,&lv_style_plain_color);
//设置样式 -- 将个别需要修改的样式进行修改
//style1.body.main_color是设置背景的上半部分颜色
//style1.body.grad_color是设置背景的下半部分颜色
//这里均设置为红色
style1.body.main_color = LV_COLOR_RED;
style1.body.grad_color = LV_COLOR_RED;
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置大小
lv_obj_set_size(obj1,100,100);
//设置坐标
lv_obj_set_pos(obj1,80,80);
// 用 copy参数将 obj1 对象上的属性值复制过来创建 obj2
obj2 = lv_obj_create(scr,obj1);
lv_obj_set_style(obj2,&style1);
lv_obj_set_size(obj2,50,50);
lv_obj_set_pos(obj2,150,150);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,300,80);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
演示如下:
默认情况下,基础对象是没有开启点击事件的,比如这里的 obj1 。如果想要开启,就可以使用这里的函数来开启。
代码如下:(初始时,ob1处于隐身状态,当点击按钮后,开启 ob1 的点击事件功能,当点击 ob1 时关闭按钮的点击事件。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
lv_obj_t* scr;
//声明一个按钮的事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_hidden(obj1, false);
lv_obj_set_click(obj1,true);
}
}
}
//声明一个obj1的事件回调函数
void obj1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == obj1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_click(btn1,false);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置大小
lv_obj_set_size(obj1,100,100);
//设置坐标
lv_obj_set_pos(obj1,80,80);
//初始时obj1处于隐身状态
lv_obj_set_hidden(obj1, true);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,300,80);
//设置按钮的事件回调函数
lv_obj_set_event_cb(btn1,btn1_event_cb);
//设置obj1的事件回调函数
lv_obj_set_event_cb(obj1,obj1_event_cb);
}
演示效果如下:
默认情况下,基础对象和这里的按钮都是不可以被拖拽的,当调用这个接口后,所设置的那个对象就可以被拖拽。
代码如下:(初始时,ob1 处于隐身状态,当点击按钮后,关闭 ob1 隐身状态,同时允许 obj1 的拖拽功能。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
lv_obj_t* scr;
//声明一个按钮的事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_hidden(obj1, false);
lv_obj_set_drag(obj1, true);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置大小
lv_obj_set_size(obj1,100,100);
//设置坐标
lv_obj_set_pos(obj1,80,80);
//初始时obj1处于隐身状态
lv_obj_set_hidden(obj1, true);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,300,80);
//设置按钮的事件回调函数
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
enum {
LV_DRAG_DIR_HOR = 0x1, /**< Object can be dragged horizontally. */
LV_DRAG_DIR_VER = 0x2, /**< Object can be dragged vertically. */
LV_DRAG_DIR_ALL = 0x3, /**< Object can be dragged in all directions. */
};
typedef uint8_t lv_drag_dir_t;
这三种方向,分别是水平、垂直和所有方向。
代码如下:(初始时,ob1 处于隐身状态,当点击按钮后,关闭 ob1 隐身状态,同时允许 obj1 的水平方向拖拽功能。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
lv_obj_t* scr;
//声明一个按钮的事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_hidden(obj1, false);
lv_obj_set_drag_dir(obj1, LV_DRAG_DIR_HOR);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置大小
lv_obj_set_size(obj1,100,100);
//设置坐标
lv_obj_set_pos(obj1,80,80);
//初始时obj1处于隐身状态
lv_obj_set_hidden(obj1, true);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,300,80);
//设置按钮的事件回调函数
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
演示效果如下:
使用对象调用该函数之前,首先要使能该对象的拖拽功能。
代码如下:(初始时,obj1 处于隐身状态,当点击按钮后,关闭 obj1 隐身状态,同时允许 obj1 的拖拽滑动功能。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
lv_obj_t* scr;
//声明一个按钮的事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_hidden(obj1, false);
lv_obj_set_drag(obj1, true);
lv_obj_set_drag_throw(obj1, true);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置大小
lv_obj_set_size(obj1,100,100);
//设置坐标
lv_obj_set_pos(obj1,80,80);
//初始时obj1处于隐身状态
lv_obj_set_hidden(obj1, true);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,300,80);
//设置按钮的事件回调函数
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
演示效果如下:
可以看出,当拖拽控件的时候,松手后,控件还会继续向前滑动一段距离。
也有可能用力过猛,滑出窗体。演示如下:
使用对象调用该函数之前,首先要使能该对象以及该对象的父对象的拖拽功能。当拖动子对象时,父对象会跟着一起跑,当拖动父对象时,子对象也会跟着一起跑。但是如果虽然使能了子对象的拖拽功能,却没有使能父对象的拖拽功能,反而会导致子对象无法被拖拽了。
代码如下:(child1 是obj1 的子对象,当点击按钮后,使能 obj1 和 child1 的拖拽功能以及使能对象的父容器联动拖拽功能。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
lv_style_t style1;
lv_obj_t* child1;
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_drag(obj1, true);
lv_obj_set_drag(child1, true);
lv_obj_set_drag_parent(child1,true);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
lv_obj_t* scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置坐标
lv_obj_set_pos(obj1,50,50);
//创建一个默认对象
child1 = lv_obj_create(obj1,NULL);
//设置大小
lv_obj_set_size(child1,20,20);
//设置坐标
lv_obj_set_pos(child1,20,20);
//定义 lv_style_t 这种变量时要定义成静态局部变量或者定义为全局变量。
//static lv_style_t sty1;
//因为一个样式中的属性有很多
//所以这里为了避免麻烦,先从一个现成的样式中进行拷贝
//lv_style_plain_color是 LittleVGL 中自带的
lv_style_copy(&style1,&lv_style_plain_color);
//设置样式 -- 将个别需要修改的样式进行修改
//style1.body.main_color是设置背景的上半部分颜色
//style1.body.grad_color是设置背景的下半部分颜色
//这里均设置为红色
style1.body.main_color = LV_COLOR_RED;
style1.body.grad_color = LV_COLOR_RED;
lv_obj_set_style(child1,&style1);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,200,50);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
演示效果如下:
为了提高拖动的灵敏度,可以增大对象的尺寸。
如果使能了子对象的拖拽功能,没有使能父对象的拖拽功能,且没有设置联动功能,子对象也只能在父对象里面进行拖拽,如下图所示。
没举例子。
设置对象透明度之前需要使能对象的透明度功能。
代码如下:(当点击按钮后,使能 obj1 的透明度功能,同时将 obj1 的透明度设置为 0 。)
#include "test.h"
#include <stdio.h>
//创建一个按钮
lv_obj_t* btn1;
//创建一个默认对象
lv_obj_t* obj1;
//声明一个事件回调函数
void btn1_event_cb(lv_obj_t* obj,lv_event_t event)
{
if(obj == btn1)
{
if(event==LV_EVENT_RELEASED)
{
lv_obj_set_opa_scale_enable(obj1,true);
lv_obj_set_opa_scale(obj1,0);
}
}
}
void test_start()
{
// lv_scr_act 是获取当前活动的屏幕对象
lv_obj_t* scr = lv_scr_act();
// lv_obj_create的第一个参数是parent,即指向父对象,如果传 NULL 的话,则是在创建一个 screen.
// 第二个参数是copy,此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来,这里不使用,传NULL.
obj1 = lv_obj_create(scr,NULL);
//设置坐标
lv_obj_set_pos(obj1,50,50);
//创建按钮
btn1 = lv_btn_create(scr,NULL);
//设置坐标
lv_obj_set_pos(btn1,200,50);
//设置事件回调
lv_obj_set_event_cb(btn1,btn1_event_cb);
}
代码运行演示如下:
上面的几个函数不讲。
注:如果不调用该函数,就不要将这个宏使能,因为会造成内存的消耗。