#include "rtthread.h" #include "bf0_hal.h" #include "drv_io.h" #include "littlevgl2rtt.h" #include "lv_examples.h" #include "lvgl.h" #include "lvgl_private.h" lv_obj_t *l; int i = 0; lv_font_t *font[21] = { &lv_font_montserrat_8, &lv_font_montserrat_10, &lv_font_montserrat_12, &lv_font_montserrat_14, &lv_font_montserrat_16, &lv_font_montserrat_18, &lv_font_montserrat_20, &lv_font_montserrat_22, &lv_font_montserrat_24, &lv_font_montserrat_26, &lv_font_montserrat_28, &lv_font_montserrat_30, &lv_font_montserrat_32, &lv_font_montserrat_34, &lv_font_montserrat_36, &lv_font_montserrat_38, &lv_font_montserrat_40, &lv_font_montserrat_42, &lv_font_montserrat_44, &lv_font_montserrat_46, &lv_font_montserrat_48}; static void _set_opa_layered_cb(void *var, int32_t v) { lv_obj_set_style_opa_layered((lv_obj_t *)var, (lv_opa_t)v, 0); } static void _btn_switch_font_cb(lv_event_t *e) { if (i >= 21) { i = 0; } rt_kprintf("Switch font callback - Current index: %d\n", i); // 立即卡死:i = 8 12 15 16 18 20 21 // 透明后才卡死:i = 17 19 lv_obj_set_style_text_font(l, font[i], 0); lv_label_set_text_fmt(l, "Hello, font index %d", i); lv_anim_t anim; lv_anim_t *a = &anim; lv_anim_init(a); lv_anim_set_var(a, l); lv_anim_set_values(a, LV_OPA_100, LV_OPA_20); lv_anim_set_exec_cb(a, _set_opa_layered_cb); lv_anim_set_path_cb(a, lv_anim_path_ease_in_out); lv_anim_set_duration(a, 1000); lv_anim_set_delay(a, 0); lv_anim_start(a); i++; } static void _btn_skip_font_cb(lv_event_t *e) { if (i >= 21) { i = 0; } rt_kprintf("Skip font callback - Current index: %d\n", i); lv_obj_set_style_text_font(l, font[i], 0); lv_label_set_text_fmt(l, "Hello, font index %d", i); i++; } /** * @brief Main program * @param None * @retval 0 if success, otherwise failure number */ int main(void) { rt_err_t ret = RT_EOK; rt_uint32_t ms; /* init littlevGL */ ret = littlevgl2rtt_init("lcd"); if (ret != RT_EOK) { return ret; } lv_obj_t *scr = lv_screen_active(); l = lv_label_create(scr); lv_label_set_text(l, "Hello World"); lv_obj_set_pos(l, -50, 100); lv_obj_t *btn = lv_button_create(scr); lv_obj_set_size(btn, 100, 100); lv_obj_center(btn); lv_obj_add_event_cb(btn, _btn_switch_font_cb, LV_EVENT_CLICKED, NULL); btn = lv_button_create(scr); lv_obj_set_size(btn, 100, 100); lv_obj_align(btn,LV_ALIGN_BOTTOM_MID,0,0); lv_obj_add_event_cb(btn, _btn_skip_font_cb, LV_EVENT_CLICKED, NULL); while (1) { ms = lv_task_handler(); rt_thread_mdelay(ms); } return RT_EOK; }