二.LVGL学习——(lv_obj基础对象)
- 1.介绍
- 2.对象的工作机制
- 3.对象的创建与删除
- 4.Screen 屏幕对象
- 5.实例代码(1)
- 6.实例代码(2)
1.介绍
LVGL是以对象为概念的,而其最核心的基础对象是lv_obj控件,其他所有专用控件(如按钮,标签,列表)都是在lv_obj对象的基础上衍生出来的,所有的控件对象都具备一些共同属性,例如:
1. 位置
2. 大小
3. 父类
4. 是否可拖拽
5. 是否可点击
共同属性都是通过一套共同的API接口来设置的。
除了共同属性外,不同的控件都会有自己的专有属性。
2.对象的工作机制
父对象可以被作是其子对象的容器,每个对象只有一个父对象(screen 对象没有父对象),父对象可以有无限数量的子对象,同时父对象的类型是没有限制,
父对象和子对象之间具有如下 2 点特性:
1.一起移动:
如果父对象的位置更改,则子对象将随父对象一起移动,因此子对象的坐标位置是
以父对象的左上角而言的,而不是以屏幕的左上角
2.子对象只能在父对象的区域内显示:
如果子对象的一部分在父对象的外面,那么子对象的这一部分将不会被显示出来
3.对象的创建与删除
在littleVGL中,对象可以动态的被创建和删除,每一种对象都有其专属的create创建函数,所有对象的删除函数都是相同的
1.创建对象:
创建函数看起来如下面这样:
- lv_obj_t * lv_ < type>_create(lv_obj_t * parent, lv_obj_t * copy);
- parent: 父对象,如果想创建一个 screen 对象,那么请传 NULL 值
- copy: 此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来
2.清除对象:
lv_obj_del:删除对象操作是立即执行的
lv_obj_del_async(obj):异步删除,它会在下一个 lv_task_handler 调用时被执行
lv_obj_clean(obj):清除某个 obj 对象下的所有子对象
4.Screen 屏幕对象
屏幕对象是一个特殊的对象,因为他自己没有父对象,默认情况下,littleVGL 会为显示器创建一个 lv_obj 类型的基础对象来作为它的屏幕,即最顶层的父类,可以通过 lv_scr_act()接口来获取当前活跃的屏幕对象,通过 lv_scr_load()接口来设置一个新的活跃屏幕对象
1.创建屏幕对象:
lv_obj_t * screen1 = lv_obj_create(NULL, NULL);
5.实例代码(1)
此代码声明3个对象(屏幕、按钮、文本),将对象居中后,按下按键后松开显示按下的次数
//声明按钮子对象为全局
lv_obj_t* btn1;
//声明屏幕对象为全局
lv_obj_t* obj1;
//声明文本对象为全局
lv_obj_t* label;
void btn1_event_cb(lv_event_t* event1)
{
//声明变量
static uint32_t cnt = 1;
//获取事件对象
btn1 = lv_event_get_target(event1);
//获取第一个子对象
label = lv_obj_get_child(btn1, 0);
//设置显示内容
lv_label_set_text_fmt(label, "%d", cnt);
//变量自加
cnt++;
//删除文本对象
//lv_obj_del(label);
}
void lv_demo_my_mark(void)
{
/****************************************屏幕对象*******************************************/
//获取默认屏幕
lv_obj_t* src = lv_scr_act();
//创建屏幕对象
obj1 = lv_obj_create(src,NULL);
//屏幕对象居中显示
lv_obj_center(obj1);
/****************************************按钮对象*******************************************/
//创建按钮并且,选取src屏幕作为父对象,不需要复制对象
btn1 = lv_btn_create(src,NULL);
//设置对象大小
lv_obj_set_size(btn1, 100, 50);
//按钮对象居中显示
lv_obj_center(btn1);
/****************************************文本对象*******************************************/
//Button对象上创建Label对象
label = lv_label_create(btn1);
//设置显示内容
lv_label_set_text(label, "Click me!");
//文本对象居中显示
lv_obj_center(label);
//设置回调函数
lv_obj_add_event_cb(btn1, btn1_event_cb, LV_EVENT_CLICKED, NULL);
}
6.实例代码(2)
此代码功能,更改父级,删除子对象,对象前置,拷贝对象样式
//声明屏幕对象为全局
lv_obj_t* src;
//声明按钮子对象为全局
lv_obj_t* btn1;
//声明矩形对象为全局
lv_obj_t* obj1;
//声明矩形子对象为全局
lv_obj_t* obj2;
//声明矩形子对象为全局
lv_obj_t* obj3;
//声明文本对象为全局
lv_obj_t* label;
//声明矩形子对象的样式为全局
lv_style_t style1;
//声明矩形子对象的样式为全局
lv_style_t style2;
void btn1_event_cb(lv_event_t* event1)
{
//删除obj1下所有的子对象
//lv_obj_clean(obj1);
//更换父对象
//lv_obj_set_parent(obj3, src);
//将对象前置
lv_obj_move_foreground(obj2);
}
void lv_demo_my_mark(void)
{
/****************************************屏幕对象*******************************************/
//获取默认屏幕
src = lv_scr_act();
//选取默认屏幕作为父级,在此基础上画一个矩形对象
obj1 = lv_obj_create(src, NULL);
//设置矩形对象大小
lv_obj_set_size(obj1, 400, 400);
//屏幕对象居中显示
lv_obj_center(obj1);
/****************************************按钮对象*******************************************/
//创建按钮并且,选取src屏幕作为父对象,不需要复制对象
btn1 = lv_btn_create(src,NULL);
//设置对象大小
lv_obj_set_size(btn1, 100, 50);
//设置按钮对象的坐标
lv_obj_set_pos(btn1, 10, 10);
/****************************************矩形对象*******************************************/
//创建矩形子对象
obj2 = lv_obj_create(obj1, NULL);
//设置矩形子对象的坐标
lv_obj_set_pos(obj2, 0, 0);
//拷贝obj2的图形样式
obj3 = lv_obj_create(obj1, obj2);
//设置矩形子对象的坐标
lv_obj_set_pos(obj2, 100, 0);
//设置对齐方式
//lv_obj_align_to(obj3,obj2,LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
//设置回调函数
lv_obj_add_event_cb(btn1, btn1_event_cb, LV_EVENT_CLICKED, NULL);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)