lvgl 创建圆形区域 和 圆形手柄可以拖拽移动 并且添加位置输出
时间: 2024-02-03 19:04:40 浏览: 140
可以使用 LVGL 中的 `lv_obj_create()` 函数创建圆形区域,并使用 `lv_obj_set_drag()` 函数使其成为可拖拽的对象。可以使用 `lv_obj_set_drag_dir()` 函数指定拖拽方向,并使用 `lv_obj_set_drag_throw()` 函数指定拖拽结束后是否自动吸附到指定位置。为了输出位置,可以使用 `lv_obj_set_event_cb()` 函数设置事件回调函数,在拖拽结束后输出位置信息。
示例代码:
```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_set_drag(circle, true);
lv_obj_set_drag_dir(circle, LV_DRAG_DIR_ALL);
lv_obj_set_drag_throw(circle, true);
lv_obj_set_event_cb(circle, circle_event_cb);
void circle_event_cb(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_DRAG_END) {
lv_coord_t x = lv_obj_get_x(obj);
lv_coord_t y = lv_obj_get_y(obj);
printf("Circle position: (%d, %d)\n", x, y);
}
}
```
对于圆形手柄的创建,可以使用圆形区域的方法,只需要在事件回调函数中计算手柄位置与圆心的距离,即可实现手柄围绕圆形区域的拖拽。
示例代码:
```c
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_obj_set_drag(handle, true);
lv_obj_set_event_cb(handle, handle_event_cb);
void handle_event_cb(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_DRAG_END) {
lv_coord_t x = lv_obj_get_x(obj) + lv_obj_get_width(obj) / 2;
lv_coord_t y = lv_obj_get_y(obj) + lv_obj_get_height(obj) / 2;
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;
int dist = sqrt(pow(x - cx, 2) + pow(y - cy, 2));
printf("Handle position: (%d, %d), distance to center: %d\n", x, y, dist);
}
}
```
阅读全文