我在使用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