对 lvgl 的通俗介绍

学习 lvgl 的理解总结,如有错误,麻烦各位大佬帮忙指正


目录

什么是 lvgl ?

部件的基本属性(所有部件都具备的属性)

一、大小

二、位置

三、样式

 1、有哪些样式

2、如何给部件添加样式

3、如何单独设置部件中某个部分的样式

四、事件

1、事件类型

2、事件回调函数


什么是 lvgl ?

lvgl 其实就是各种图形部件 Widget(如滑块、滚轮、按钮等)的集合库(GUI 库)。每个部件都是通过 API 函数创建(函数格式一般都是 lv_xxx_create( ),xxx 是部件名)。lv_obj_t 是部件类型,是结构体进行 typedef 后的重命名(可用来创建结构体或结构体指针,这个结构体内部具备所有部件的属性),因此,所有部件都具备一些共同属性,例如大小、颜色、位置、样式这些,只是不同部件其具体的参数可能不同

lvgl 采用了一定的面向对象编程的设计思想,我们操控的都是一个个别人事先为我们准备好编写好的部件(对象),如果想要使用部件,就得先创建部件需要调用部件创建函数(实例化),不像 C 是面向过程的编程,不管做什么都是从零开始(想使用部件也得从零开始编写出一个部件)。所有的对象都是在 lv_obj_t 这个结构体的基础上进行演变的,诞生各种不一样的部件

关于 lvgl 的屏幕

屏幕在 lvgl 中,是没有父类的基础对象,是 lvgl 初始化时就默认创建的部件,其他所有部件都是屏幕的衍生物(其他部件都继承于屏幕,屏幕是所有部件的父对象,准确说,屏幕是其他所有部件的最初父对象),如下:

ced8dae4cba441d9bd6053b1ab614322.png

Q:为什么说其他部件均继承于屏幕,或其他部件是屏幕的衍生物?

 

A:创建部件时,需要调用部件创建函数,部件创建函数有一个参数是 parent,即父对象,就是指定一个对象作为父对象,在父对象上创建生成一个部件,父对象是新部件的容器、是新部件的活动范围,没有父对象的话,新部件就无法出现(当然基础对象屏幕除外),如下:

lv_obj_t * obj1 = lv_obj_create(lv_scr_act()); //创建部件 obj1,父对象是屏幕
lv_obj_set_size(obj1, LV_PCT(40), LV_PCT(40)); //设置 obj1 的宽度、高度
lv_obj_align(obj1, LV_ALIGN_CENTER, 0, 0); //以父对象作为参照物进行居中

lv_obj_t * obj2 = lv_obj_create(obj1); //创建部件 obj2,父对象是 obj1
lv_obj_set_size(obj2, LV_PCT(20), LV_PCT(20)); //设置 obj2 的宽度、高度
lv_obj_align(obj2, LV_ALIGN_CENTER, 0, 0); //以父对象作为参照物进行居中

691da3e615544d57946655950a4a8561.png

可以看到,obj1 是在屏幕上创建的,位于屏幕内,也只能在屏幕内活动。obj2 是在 obj1 上创建的,位于 obj1 内,也只能在 obj1 内活动。

除屏幕外的所有部件,第一个创建的部件永远是以屏幕作为父对象才能被创建的。


部件的基本属性(所有部件都具备的属性)

一、大小

设置部件的宽度、高度的函数

lv_obj_set_width (obj, new_width)

设置 obj 部件的宽度

lv_obj_set_height (obj, new_height)

设置 obj 部件的高度

lv_obj_set_size (obj, new_ width, new_ height)

设置 obj 部件的宽度和高度

获取部件的宽度、高度的函数

lv_obj_get_width (obj)

获取 obj 部件的宽度

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值