LVGL core obj and obj_class 对象管理(lv_obj.c/lv_obj_class.c)

本文介绍了LVGL库中基于C语言的对象管理机制,讲解了lv_obj_class_t和lv_obj_t数据结构,以及对象的初始化、自定义组件创建和绘制事件生命周期。LVGL通过类似继承的方式来实现组件,提供了对象构造、析构和事件处理等功能。文章还探讨了如何通过lv_obj_t的坐标、属性和样式进行对象操作。
摘要由CSDN通过智能技术生成

更多源码分析请访问:LVGL 源码分析大全


1、概述

LVGL的虽然是用c语言实现的代码,却采用lv_obj_tlv_obj_class_t结构体来实现一些对象思想。相比与C++语言来讲,该套机制实现了继承关系,却没有支持重载关系(之所以说它只支持继承关系而不支持重载,就是因为这个结构体在使用时,多被定义为const修饰,这样对象的功能函数就没法修改了。如果有用到重载关系的,需要开发者自行处理)。lv_obj_class_t对应C++中的类,而lv_obj_t对应着对象,对象lv_obj_t通过类lv_obj_class_t来构造。
lv_obj_class_t对象使用lv_obj_class.c中定义的接口来构造成lv_obj_t对象,lv_obj_t对象使用lv_obj.c中的接口来

LVGL v7.11 中,可以使用 `lv_obj_add_style_local_image_recolor_opa` 函数来实现类似于 `lv_obj_set_style_local_image_recolor` 的功能。这个函数用于设置对象的局部样式,以改变图片的颜色。 以下是示例代码: ```c #include "lvgl/lvgl.h" void lv_example_image_colors(void) { /* 创建一个画布 */ lv_obj_t * canvas = lv_canvas_create(lv_scr_act(), NULL); lv_canvas_set_buffer(canvas, LV_COLOR_DEPTH); lv_obj_set_size(canvas, 200, 200); lv_obj_center(canvas); /* 加载图片到画布 */ lv_img_set_src(canvas, "path_to_your_image.png"); /* 创建一个按钮 */ lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL); lv_btn_set_fit2(btn, LV_FIT_TIGHT, LV_FIT_TIGHT); lv_obj_align(btn, canvas, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); /* 创建一个标签,用于显示颜色选择器的当前颜色 */ lv_obj_t * label = lv_label_create(btn, NULL); lv_label_set_text(label, "Color: None"); /* 创建颜色选择器 */ lv_obj_t * colorpicker = lv_colorpicker_create(btn, NULL); lv_obj_align(colorpicker, label, LV_ALIGN_OUT_RIGHT_MID, 10, 0); lv_colorpicker_set_color_mode(colorpicker, LV_COLOR_PICKER_MODE_HUE); /* 设置颜色选择器的回调函数 */ lv_colorpicker_set_color_changed_cb(colorpicker, [](lv_color_t color) { /* 更新标签的文本和画布的颜色 */ char buf[32]; sprintf(buf, "Color: #%02x%02x%02x", color.ch.red, color.ch.green, color.ch.blue); lv_label_set_text(label, buf); lv_obj_add_style_local_image_recolor_opa(canvas, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, color.ch.red); }); } ``` 同样,请确保将 `path_to_your_image.png` 替换为您实际的图片路径。此示例代码创建了一个画布,加载了一张图片,并在按钮上添加了一个颜色选择器,用于改变画布图片的颜色。当选择器的颜色发生变化时,会更新按钮上的标签文本和画布的颜色。 希望这个示例代码对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bigan(安)

打赏100可获技术支持一次

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值