LVGL 从什么时候开始知道要进行绘制的?(真正的绘制开始啦)

如何得知对象的状态发生改变,需要重新绘制?

event的开始

在LVGL中,`lv_obj_send_event` 函数是一个用于发送事件到指定对象的函数。这个函数的调用意味着事件传递机制的开始,它是LVGL事件系统的核心部分,用于在不同组件之间传递消息和信号。当一个对象( 比如按钮、滑块、文本框等)发生了某种状态的改变(例如,被点击、值改变等),`lv_obj_send_event` 函数就会被用来发送一个事件。这个事件会被发送到对象本身,以及可能的父对象。

这个函数的调用通常意味着以下几个方面:

1. **状态改变通知**:当用户与界面交互或者界面内部状态发生变化时,`lv_obj_send_event` 函数会发送一个事件,通知其他部分代码这个改变。

2. **事件传递**:事件会按照一定的顺序传递给注册的回调函数。这些回调函数可以是用户自定义的,用于处理特定类型的事件。

3. **响应链**:事件的发送启动了一个响应链,这个链条上的每个环节都有机会处理这个事件。如果当前对象的回调没有处理这个事件,它会被传递到父对象,直到被处理或者到达响应链的顶端。

4. **用户自定义事件处理**:用户可以注册自己的事件回调函数,用于处理特定对象发送的事件。这样,当`lv_obj_send_event` 被调用时,用户的回调函数会被触发,执行相应的逻辑。

5. **界面更新**:事件的发送有时也会导致界面的更新。例如,当一个对象的尺寸发生变化时,发送的事件可能会触发重绘,以反映新的界面状态。

`lv_obj_send_event` 函数的调用是LVGL中事件驱动模型的一个关键环节,它确保了用户交互和内部状态变化能够被正确地传递和响应。通过这个机制,开发者可以创建动态、响应式的图形用户界面。

event的核心

event_send_core 函数是事件系统的核心函数,它的主要作用是处理和分发事件到相应的对象和回调函数。这个函数是LVGL事件处理机制的心脏,确保了事件能够从源头传递到目标对象,并且允许用户定义的处理函数得以执行。

以下是event_send_core函数的主要作用:

  1. 事件创建:当界面中的

  • 43
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LVGL可以使用自定义绘制来显示图形。你可以使用LVGL的绘图接口来创建自定义的绘制函数,并将其添加到图形对象中。具体步骤如下: 1. 创建一个自定义绘制函数,该函数应该接受一个指向绘图缓冲区的指针和要绘制的对象的坐标和大小等信息作为参数。 2. 使用LVGL的绘图接口,在绘图缓冲区中绘制你想要的图形。例如,你可以使用`lv_draw_rect()`函数绘制一个矩形,使用`lv_draw_line()`函数绘制一条线。 3. 将自定义绘制函数添加到图形对象中。你可以使用`lv_obj_set_draw_func()`函数将自定义绘制函数与对象关联起来。 下面是一个简单的示例代码,演示如何使用自定义绘制函数在一个按钮对象中绘制一个带有阴影效果的矩形框: ```c static void btn_draw_shadow(lv_obj_t *obj, const lv_area_t *clip_area) { lv_style_t *style = lv_obj_get_style(obj); lv_coord_t r = LV_RADIUS_CIRCLE; lv_coord_t w = lv_obj_get_width(obj); lv_coord_t h = lv_obj_get_height(obj); lv_coord_t bw = style->body.border.width; lv_coord_t sw = style->body.shadow.width; lv_coord_t sh = style->body.shadow.spread; lv_draw_rect_dsc_t rect_dsc; lv_draw_rect_dsc_init(&rect_dsc); rect_dsc.bg_opa = LV_OPA_COVER; rect_dsc.bg_color = style->body.main_color; rect_dsc.radius = r; lv_draw_rect(&obj->coords, clip_area, &rect_dsc); lv_draw_shadow_dsc_t shadow_dsc; lv_draw_shadow_dsc_init(&shadow_dsc, &obj->coords, clip_area, sw, sh, bw, style->body.border.color, style->body.shadow.color); lv_draw_shadow(&shadow_dsc); } lv_obj_t *btn = lv_btn_create(lv_scr_act()); lv_obj_set_size(btn, 100, 50); lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0); lv_obj_set_style_local_radius(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Button"); lv_obj_set_draw_func(btn, btn_draw_shadow); ``` 在上面的代码中,我们先定义了一个名为`btn_draw_shadow()`的自定义绘制函数。该函数使用`lv_draw_rect()`函数绘制一个矩形,然后使用`lv_draw_shadow()`函数绘制一个阴影效果。然后我们将该函数与按钮对象关联起来,即使用`lv_obj_set_draw_func()`函数将其添加到按钮对象中。最后,我们在主函数中创建了一个按钮对象,并调用了`btn_draw_shadow()`函数来显示该按钮。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值