lvglv8.2不使用拖拽 创建圆形区域 和 圆形手柄可以拖拽移动 并且添加位置输出
时间: 2024-02-04 18:01:39 浏览: 19
如果不使用拖拽功能,可以使用 LVGL 中的 `lv_task_create()` 函数创建定时任务来更新圆形手柄的位置,并使用 `lv_obj_set_pos()` 函数设置手柄的位置。同样的,也可以使用定时任务输出圆形区域和手柄的位置。
示例代码:
```c
lv_obj_t * circle = lv_obj_create(lv_scr_act());
lv_obj_set_size(circle, 100, 100);
lv_obj_set_style(circle, &lv_style_pretty_color);
lv_obj_t * handle = lv_obj_create(circle);
lv_obj_set_size(handle, 20, 20);
lv_obj_set_style(handle, &lv_style_pretty_color);
lv_task_t * task = lv_task_create(handle_update_task, 50, LV_TASK_PRIO_LOW, handle);
void handle_update_task(lv_task_t * task)
{
lv_coord_t cx = lv_obj_get_x(circle) + lv_obj_get_width(circle) / 2;
lv_coord_t cy = lv_obj_get_y(circle) + lv_obj_get_height(circle) / 2;
lv_coord_t x = cx + cos(lv_tick_get() / 1000.0) * 40;
lv_coord_t y = cy + sin(lv_tick_get() / 1000.0) * 40;
lv_obj_set_pos(handle, x - lv_obj_get_width(handle) / 2, y - lv_obj_get_height(handle) / 2);
printf("Circle position: (%d, %d), handle position: (%d, %d)\n",
lv_obj_get_x(circle), lv_obj_get_y(circle),
lv_obj_get_x(handle), lv_obj_get_y(handle));
}
```
在这个示例中,我们使用了 `cos()` 和 `sin()` 函数来计算手柄的位置,手柄将围绕圆形区域移动。这个示例中使用了一个定时任务,每 50 毫秒更新一次手柄位置。你可以根据实际需求调整任务的执行频率。
另外需要注意的是,这个示例中手柄是圆形区域的子对象,因此手柄的坐标是相对于圆形区域的。在输出位置信息时,需要使用 `lv_obj_get_x(circle)` 和 `lv_obj_get_y(circle)` 函数获取圆形区域的坐标。