LVGL学习第一站对象

       本文章只是用来记录学习过程的,如果大家想看视频,请输入一下链接。由韦东山老师创作。

https://video.100ask.net/p/t_pc/course_pc_detail/video/v_61c5a387e4b0cca4a4e8b70e?product_id=p_61c5a317e4b0cca4a4e8b6f1&content_app_id=&type=6

        在LVGL中,使用继承的实现进行开发,类似与C++的继承和基类,大白话就是一生二,二生三,三生万物。如下图所示:

        

 图片来源于韦东山老师,如果侵权请联系删除。

1.lvgl对象 

lv_obj_t 是一个基类,它既可以生成对象的大小,也可以生成任何组件。 如下代码所示:

 2.基础对象

    2.2.lvgl基础对象操作

       2.2.1 三层屏幕(活动屏幕最长使用)

lv_scr_act(void); 	// 活动屏幕	  disp->act_scr
lv_layer_top (void); 	// 顶层	 disp->top_layer
lv_layer_sys (void);	// 系统层	 disp->sys_layer

         2.2.2基础对象的大小

//设置宽度:
lv_obj_set_width(obj, new_width);
设置高度:
lv_obj_set_height(obj, new_height);
同时设置宽度、高度:
lv_obj_set_size(obj, new_ width, new_ height);

例程代码测试

/*基础对象大小*/
void lvgl_obj_size()
{
	lv_obj_t * container = lv_obj_create(lv_scr_act());
	lv_obj_set_size(container, 100, 100);
	lv_obj_center(container);

	
}

       2.2.3基础对象的位置(position)

设置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);  // position

        2.2.4对齐方式

参照父对象对齐:
lv_obj_set_align(obj, LV_ALIGN_...);
参照父对象对齐后再设置坐标位置:
lv_obj_align(obj, LV_ALIGN_..., x, y);
参照另一个对象(无父子关系)对齐后设置坐标位置:
lv_obj_align_to(obj_to_align, obj_referece, LV_ALIGN_..., x, y)

对齐参数类型如下图所示

 测试代码

void lv_100ask_demo_course_2_2_3(void)
{
    lv_obj_t * obj = lv_obj_create(lv_scr_act());
    lv_obj_set_align(obj, LV_ALIGN_CENTER);

    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Hello, LVGL!");
    lv_obj_align_to(label, obj, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);

    //printf("w:%d\n", lv_obj_get_x(obj));
    //printf("h:%d\n", lv_obj_get_y(obj));
}

/*创建一个中心屏幕按照父对象中心对齐,创建一个lable让lable按照父对象底部对齐*/

  2.3基础对象的盒子模型 

        作用:在使用样式时,便是对以下的盒子进行操作。

        如图所示:

        

   介绍:

   边界(bounding):元素的宽度/高度围起来的区域(整个盒子)

   边框(border):边框有大小和颜色等属性(相当于盒子的厚度和它的颜色)

   填充(padding):对象两侧与其子对象之间的空间(盒子的填充物)

   内容(content):如果边界框按边框宽度和填充的大小缩小,则显示其大小的内容区域(盒子实际装东西的区域)

   轮廓(outline)LVGL中没有外边距(margin)的概念(盒子之间的距离),确认代之的是轮廓(outline)。它是绘制于元素(盒子)周围的一条线,它不占据空间,位于边框边缘的外围,可起到突出元素(盒子)的作用。在浏览器里,当鼠标点击或使用Tab键让一个选项或者一个图片获得焦点的时候,这个元素就会多了一个轮廓框围绕。轮廓(outline)

   2.4样式(正常样式和本地样式)

         注意:本地样式的优先级会大于正常样式。

          特点及作用:①它可以保存边框宽度、文本颜色等属性。②在赋值过程中,可以指定目标部分目标状态。③一个样式可以给多个对象使用(正常样式)。④样式可以级联,也就是可以将多个样式分配给一个对象。⑤样式具有父级继承功能,前提是自己未设置其样式。

        操作步骤:

                ①:初始化样式:  

static lv_style_t style_obj;  /*样式的变量不可以是局部变量*/
lv_style_init(&style_obj);

                ②:设置样式属性

lv_style_set_<property_name>(&style, <value>); /*接口函数*/


/*示例说明*/
lv_style_set_bg_color(&style_obj, lv_color_hex(0x000000));   // 设置背景色	


lv_style_set_bg_opa(&style_obj, LV_OPA_50);	                    // 设置背景透明度

                ③添加(应用)样式到对象

/*函数接口介绍*/
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_remove_style_all(obj);


/*删除对象的特定样式*/
lv_obj_remove_style(obj, &style_obj, selector);

   测试代码

void lv_100ask_demo_course_2_2_5(void)
{
    // 正常样式
    static lv_style_t style_obj;

		/*初始化样式*/
	  lv_style_init(&style_obj);
	  /*设置样式属性*/
    lv_style_set_bg_color(&style_obj, lv_color_hex(0x000000));      // 设置背景色
    lv_style_set_text_color(&style_obj, lv_color_hex(0xc43e1c));    // 设置文字颜色
    lv_style_set_bg_color(&style_obj, lv_color_hex(0xc43e1c));    // 设置背景色
    lv_style_set_bg_opa(&style_obj, 30);                          // 设置透明度

    // 创建对象
    lv_obj_t * obj = lv_obj_create(lv_scr_act());

    lv_obj_t * obj2 = lv_obj_create(lv_scr_act());
    lv_obj_align(obj2, LV_ALIGN_CENTER, 0 ,0);
	
		 // 添加样式到对象
    lv_obj_add_style(obj, &style_obj, 0);                   // 默认状态: LV_STATE_DEFAULT
    lv_obj_add_style(obj2, &style_obj, 0);                  // 默认状态: LV_STATE_DEFAULT
}

  • 35
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值