最近在搞LVGL动画内容,发现网上能参考的资源太少了。现将自己学习到的内容做个笔录,仅供自己记录,若对你有帮助,那么最好不过,共勉!
首先,我是在CodeBlock上仿真
#define PI 3.14159265359
static void arc_path_cb(void* obj, int32_t v) {
lv_obj_t* target = (lv_obj_t*)obj;
// 圆心坐标和半径
int cx = 50; // 圆心 X 坐标
int cy = 40; // 圆心 Y 坐标
int r = 120; // 半径
float angle = v * PI / 180.0;
lv_coord_t x = cx + r * cos(angle);
lv_coord_t y = cy + r * sin(angle);
lv_obj_set_pos(target, x, y);
}
void create_arc_move_loop(lv_obj_t* parent) {
lv_obj_t* obj = lv_obj_create(parent);
lv_obj_set_size(obj, 50, 50);
lv_obj_set_style_bg_color(obj, lv_color_hex(0xFF0000), 0);
lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0);
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, obj);
lv_anim_set_exec_cb(&a, arc_path_cb);
lv_anim_set_time(&a, 3000); // 动画时间:3000ms
lv_anim_set_values(&a, 0, 200);
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE); // 无限循环
lv_anim_start(&a);
}
void lv_example_arc_move_loop(void) {
lv_obj_t* scr = lv_scr_act();
lv_obj_t* btn = lv_obj_create(scr);
lv_obj_set_size(btn,50,50);
lv_obj_set_style_bg_color(btn, lv_color_hex(0x00ff00), 0);
lv_obj_set_pos(btn, 300, 200);
create_arc_move_loop(scr);
}