lvgl的所有空间widget都基于lv_obj_t。t表示类型,自定义类型。
lv_btn_create()
lv_lable_create()
//都(继承)lv_obj_t
//lv_obj_t是一个结构体,其实lv_btn_create() lv_lable_create()都是用于创建lv_obj_t结构体
//类似面向对象语言中的子类型转成父类型
widget创建:
lv_obj_t *w1 = lv_obj_create(lv_scr_act());
//这里的lv_scr_act()表示整块屏幕的根父类。
lv_obj_t *w2 = lv_obj_create(w1);
//这里的w2的父类是w1。
// w2会随w1的位置移动而相对移动。
widget属性:
lv_obj_t *w1 = lv_obj_create(lv_scr_act());
-
大小
//设置宽度为100 lv_obj_set_width(w1,100); //设置高度为50 lv_obj_set_height(w1,50); //同时设置宽度和高度 100x50 lv_obj_set_size(w1,100,50); //如果部件没有设置,会有默认的宽高。 -
位置
//坐标系跟电脑屏幕的是一样的,左上角为0,0 右下角为x,y。 //部件默认是在父类对象的左上角 //设置的是相对位置,不是绝对位置 //设置x轴坐标 lv_obj_set_x(w1,100); //设置y轴坐标 lv_obj_set_y(w1,100); //同时设置x,y轴坐标 lv_obj_set_pos(w1,100,100);//posation -
对齐*
//1.参照父对象对齐 lv_obj_set_align(obj,LV_ALIGN_...); //参照父对象对齐,在进行偏移 lv_obj_align(obj,LV_ALIGN_...,x,y);//2.参照其他对象对齐(无父子关系之间的对象) //参照其他对象对齐,再进行偏移 lv_obj_align_to(obj_to_align,obj_referece,LV_ALIGN_...,x,y) -
样式
static lv_style_t style; //这里如果没有设置static 或者lv_style_t没有全局,会随方法栈丢失 lv_style_init(&style);//必须先初始化 //设置边框 lv_style_set_border_color(&style, lv_color_hex(0x00FF00)); //创建对象 lv_obj_t *obj = lv_obj_create(lv_scr_act()); //应用到对象 lv_obj_add_style(obj, &style, LV_STATE_PRESSED);上面是最常用的方式,这种方式可以将样式和代码进行分离。单独一个文件存放样式。
//直接设置 lv_obj_t *obj2 = lv_obj_create(lv_scr_act()); lv_obj_set_style_bg_color(obj2, lv_color_hex(0xFF0000),LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(obj2, LV_OPA_50,LV_STATE_DEFAULT); lv_obj_set_style_bg_color(obj2, lv_color_hex(0x00FF00),LV_STATE_PRESSED);这种方式也有一定的应用。
不同部件的样式
lv_obj_t *slider = lv_slider_create(lv_scr_act());
lv_obj_align(slider, LV_ALIGN_BOTTOM_MID,0,-40);
//设置slider主体颜色
lv_obj_set_style_bg_color(slider, lv_color_hex(0xFF0000),LV_STATE_DEFAULT|LV_PART_INDICATOR);
lv_obj_set_style_bg_color(slider, lv_color_hex(0xFF0000),LV_STATE_DEFAULT|LV_PART_MAIN);
lv_obj_set_style_bg_color(slider, lv_color_hex(0xFF0000),LV_STATE_DEFAULT|LV_PART_KNOB);
5.事件
lv_obj_t *btn = lv_btn_create(lv_scr_act());
static char* my_data = "Hello World";
//不能这么写 LV_EVENT_CLICKED | LV_EVENT_LONG_PRESSED只会触发一个
lv_obj_add_event_cb(btn, lv_event_handler, LV_EVENT_CLICKED, my_data);
//这里的my_data可以传任意类型的指针
lv_obj_add_event_cb(btn, lv_event_handler, LV_EVENT_LONG_PRESSED, my_data);
static void lv_event_handler(lv_event_t *e)
{
void *user_data = lv_event_get_user_data(e);
// 根据实际类型进行转换和使用
char *str = (char*)user_data;
//判断事件类型
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_CLICKED)
{
//修改寄存器值
printf("event_code: %d,%s\n",e->code,str);
}else if( code == LV_EVENT_LONG_PRESSED) {
//修改寄存器值
printf("event_code: %d,%s\n",e->code,str);
}
//判断是否是父级对象
}