我在使用lvgl 圆弧的时候,给它加上动画。每秒圆弧的值会加1。我想在一个标签里显示当前圆弧的值应该怎么设置回调?

我在使用lvgl 圆弧的时候,给它加上动画。每秒圆弧的值会加1。我想在一个标签里显示当前圆弧的值应该怎么设置回调?我使用lv_obj_add_event_cb(arc, arc_event_cb, LV_EVENT_VALUE_CHANGED, label_temp);这事件不会触发,标签的值不会变化。

这个很简单,代码:


static void arc_event_cb(lv_event_t * e)
{
   lv_obj_t * arc = lv_event_get_target(e);
   lv_obj_t * label = lv_event_get_user_data(e);

   lv_label_set_text_fmt(label, "%d", lv_arc_get_value(arc));
}

static void set_arc_value(void * obj, int32_t v)
{
    lv_arc_set_value(obj, v);

    // 通知arc和label数值已被改变
    lv_event_send(obj, LV_EVENT_VALUE_CHANGED, NULL);
}


static void lv_100ask_example_arc(void)
{
    /*Create an Arc*/
    lv_obj_t * arc = lv_arc_create(lv_scr_act());
    lv_arc_set_rotation(arc, 270);
    lv_arc_set_bg_angles(arc, 0, 360);
    lv_obj_remove_style(arc, NULL, LV_PART_KNOB);   /*Be sure the knob is not displayed*/
    lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE);  /*To not allow adjusting by click*/
    lv_obj_center(arc);

    lv_anim_t a;
    lv_anim_init(&a);
    lv_anim_set_var(&a, arc);
    lv_anim_set_exec_cb(&a, set_arc_value);
    lv_anim_set_time(&a, 1000);
    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);    /*无限重复*/
    lv_anim_set_repeat_delay(&a, 500);
    lv_anim_set_values(&a, 0, 100);
    lv_anim_start(&a);

    // 创建label展示arc数值
    lv_obj_t * label = lv_label_create(arc);
    lv_obj_center(label);

    lv_obj_add_event_cb(arc, arc_event_cb, LV_EVENT_VALUE_CHANGED, label);

}

上面的代码基于这里修改而来: http://lvgl.100ask.net/8.2/widgets/core/arc.html#loader-with-arc