_lv_ll_init(&LV_GC_ROOT(_lv_disp_ll),sizeof(lv_disp_t));// 注册初始化显示器链表
_lv_ll_ins_head(&LV_GC_ROOT(_lv_disp_ll)); // 注册显示器到链表
disp->act_src = lv_obj_create(NULL); //在显示器上创建一个默认屏幕
lv_obj_class_create_obj
obj->coords.x1 =0;
obj->coords.y1=0;
obj->coords.x2 = lv_disp_get_hor_res(NULL)-1;//设置屏幕的水平宽度
obj->coords.y2 = lv_disp_get_ver_res(NULL)-1;//设置屏幕的垂直高度
lv_object_set_width(obj,new_width);
lv_object_set_height(obj,new_height);
lv_object_set_size(obj,new_width,new_height);
lv_obj_get_width(obj);
lv_obj_get_width(obj);
lv_obj_set_x(obj,new_x);
lv_obj_set_y(obj,new_y);
lv_obj_set_pos(obj,new_x,new_y);
lv_obj_set_align(obj,LV_ALIGN_...);
lv_obj_align(obj,LV_ALIGN_...,x,y);
lv_obj_align_to(obj_to_align,obj_refrence,LV_ALIGN_...,x,y);
lv_obj_get_x(obj);
lv_obj_get_y(obj);
LVGL和Css的border-box模型大致相同,对象的"盒子"由以下部分构成:
样式存储在 lv_style_t 变量中。样式变量应该是 静态 、全局或动态分配 的。 也就是它们不能是函数中的局部变量,因为当函数结束时它们会被销毁。样式初始化示例:
static lv_style_t style_obj;
lv_style_init(&style_obj);
lv_style_set<pproperty_name>(&style,<value>);
lv_style_set_bg_color(&style_obj,lv_color_hex(0x666666));//设置背景色
lv_style_set_bg_opa(&style_obj,LV_OPA_50);//设置背景透明度
lv_style_set...
...
lv_obj_add_style(obj,&style,<selector>);
lv_obj_add_style(obj,&style_obj,0);//默认
lv_obj_add_style(obj,&style_obj,LV_STATE_PRESSED);//在对象被按下时应用样式
lv_obj_get_style_<property_name>(obj,<part>);
lv_color_t_color=lv_obj_get_style_bg_color(obj,LV_PART_MAIN);
lv_obj_remove_style_all(obj);
lv_obj_remove_style(obj,&style_obj,selector);
lv_obj_remove_style(obj,NULL,LV_STATE_ANY|LV_PART_ANY);
对象可以处于以下状态组合:
对象可以有部分(parts),他们也可以有自己的样式,lvgl中存在以下预定定义部分:
LV_PART_MAIN 类似矩形的背景
LV_PART_SCROLLBAR 滚动条
LV_PART_INDICATOR 指标,例如用于滑块、条、开关或复选框的勾选框
LV_PART_KNOB 像手柄一样可以抓取调整值
LV_PART_SELECTED 表示当前选择的选项或部分
LV_PART_ITEMS 如果小部件具有多个相似元素(例如表格单元格)
LV_PART_TICKS 刻度上的刻度,例如对于图表或仪表
LV_PART_CURSOR 标记一个特定的地方,例如文本区域或图表的光标
LV_PART_CUSTOM_FIRST 可以从这里添加自定义部件
例如一个滑杆(Slider)包含三个部分
背景
指示
旋钮
这意味着滑块的所有三个部分都可以有自己的样式:示例查看
lv_obj_set_style<property_name>(obj,<value>,<selector>);
//示例:
lv_obj_set_style_bg_color(obj,lv_color_hex()xffffff),0);//设置背景色
lv_obj_set_style_bg_opa(obj, LV_OPA_50, 0); // 设置背景透明度
lv_obj_remove_local_style_prop(obj,LV_STYLE_...,selector);
lv_obj_add_event_cb(obj,event_cb,event_code,user_data);
lv_event_send(obj,event_cb,event_code,user_data);
lv_obj_remove_event_cb(obj,event_cb);
lv_obj_remove_event_dsc(obj,event_dsc);//event_dsc是lv_obj_add_event_cb返回的指针
开发文档
英文
中文
事件回调函数只有一个参数:
static void my_event_cb(lv_event_t*event);
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *target = lv_event_get_target(e);
lv_obj_t *target = lv_event_get_current_target(e);
lv_event_get_user_data(e) 获取使用 lv_obj_add_event_cb传递的用户数据
lv_event_get_param(e)获取使用 lv_event_send 传递的用户数据
我们创建一个事件处理函数之后是可以给不同的对象使用的
我们创建的对象可以绑定多个事件,比如一个事件是处理点击类型的事件,一个事件是处理按下类型的事件
如果传入的用户数据不一样,一个对象可以绑定同一个事件回调函数多次,事件将按照添加的书序调用
lv_obj_add_event_cb(obj,my_clicked_event_cb,LV_EVENT_CLICKED,&num1);
lv_obj_add_event_cb(obj,my_clicked_event_cb,LV_EVENT_CLICKED,&num2);
如果对象启用了lv_obj_add_flag(obj,LV_OBJ_FLAG_EVENT_BUBBLE)
那么该对象的所有事件将发送到该对象的父级,如果父级也启用了 LV_OBJ_FLAG_EVENT_BUBBLE
,那么事件将继续发送到他的父级,以此类推
lv_event_get_target(e);
获取触发事件的当前对象lv_event_get_current_target(e);
获取事件冒泡的父对象