最近在搞lvgl图形开发库,为了学习做了一个小界面,包括scr上的图片加载,汉字输出,包括利用电脑自带TrueType字体,在lvgl中转化为.c字体(相关工具可以在网上找到很多),还有数码管字体等等,并且做了动画animation学习,附上源码:
scr1 = lv_scr_act();
scr2 = lv_obj_create(NULL);
lv_obj_t* img1=lv_img_create(lv_scr_act());
LV_IMG_DECLARE(demo1);
lv_img_set_src(img1,&demo1);
lv_obj_align(img1,LV_ALIGN_CENTER,0,0);
lv_style_init(&style1);
lv_style_init(&style2);
lv_style_init(&style3);
lv_style_set_text_font(&style1,&lv_font_montserrat_10);
lv_style_set_text_color(&style1,lv_color_white());
lv_style_set_text_font(&style2,&SMG_Font);//chi_Font
lv_style_set_text_opa(&style2,LV_OPA_90);
lv_style_set_text_color(&style2,lv_color_black());
lv_style_set_text_font(&style3,&Chisx_Font);//chi_Font
lv_style_set_text_color(&style3,lv_palette_main(LV_PALETTE_BLUE));
lv_obj_t* label1=lv_label_create(lv_scr_act());
// //?utf-8?????woshihanzi
// const char * str = "\xe6\x88\x91\xe6\x98\xaf\xe6\xb1\x89\xe5\xad\x97";
lv_obj_add_style(label1,&style2,0);
lv_obj_align(label1,LV_ALIGN_CENTER,0,-20);
lv_label_set_text(label1,"22:04");
// labeldebg=label1;
lv_obj_t* label2=lv_label_create(lv_scr_act());
lv_obj_add_style(label2,&style1,0);
lv_obj_align(label2,LV_ALIGN_TOP_RIGHT,0,0);
lv_label_set_text(label2,LV_SYMBOL_OK LV_SYMBOL_BATTERY_2 LV_SYMBOL_WIFI LV_SYMBOL_POWER);
lv_obj_t* label3=lv_label_create(lv_scr_act());
lv_obj_add_style(label3,&style3,0);
lv_obj_align(label3,LV_ALIGN_CENTER,0,30);
lv_label_set_text(label3,"\xe6\x88\x91\xE7\x88\xB1\xE4\xBD\xA0");
//图上为3个汉字,我爱你,QT显示为utf-8源码,当在QT中输入汉字,tft模拟屏上显示问号,查阅资料是与QT的编译器有关,具体解决还需要探究。
/* INITIALIZE AN ANIMATION
*-----------------------*/
lv_style_set_bg_color(&style3,lv_palette_main(LV_PALETTE_BROWN));
lv_obj_add_style(scr2,&style3,LV_PART_MAIN|LV_STATE_ANY);
lv_obj_set_size(scr2,240,240);
lv_obj_align(scr2,LV_ALIGN_CENTER,0,0);
lv_scr_load(scr1);
lv_obj_t* button1 = lv_btn_create(lv_scr_act());
lv_obj_set_size(button1,100,50);
lv_obj_set_style_radius(button1,20,0);
lv_obj_add_style(button1,&style1,LV_PART_MAIN);
lv_obj_align(button1,LV_ALIGN_CENTER,0,0);
lv_obj_t* label4 = lv_label_create(lv_scr_act());
lv_obj_add_style(label4,&style3,0);
lv_obj_align(label4,LV_ALIGN_CENTER,0,0);
lv_label_set_text(label4,"\xe6\x88\x91\xE7\x88\xB1\xE4\xBD\xA0");
lv_anim_init(&anim1);
// lv_anim_init(&anim2);
/* MANDATORY SETTINGS
*------------------*/
/*Set the "animator" function*/
lv_anim_set_exec_cb(&anim1, (lv_anim_exec_xcb_t) lv_obj_set_y);
/*Set the "animator" function*/
lv_anim_set_var(&anim1, scr2);
/*Length of the animation [ms]*/
lv_anim_set_time(&anim1, 1000);
/*Set start and end values. E.g. 0, 150*/
lv_anim_set_values(&anim1, 0, 240);
/* OPTIONAL SETTINGS
*------------------*/
/*Time to wait before starting the animation [ms]*/
lv_anim_set_delay(&anim1, 200);
/*Set path (curve). Default is linear*///lv_anim_set_path(&a, lv_anim_path_ease_in);
lv_anim_path_ease_in_out(&anim1);
// /*Set a callback to call when animation is ready.*/
// lv_anim_set_ready_cb(&a, ready_cb);
// /*Set a callback to call when animation is started (after delay).*/
// lv_anim_set_start_cb(&a, start_cb);
/*Play the animation backward too with this duration. Default is 0 (disabled) [ms]*/
lv_anim_set_playback_time(&anim1, 1000);
/*Delay before playback. Default is 0 (disabled) [ms]*/
lv_anim_set_playback_delay(&anim1, 0);
/*Number of repetitions. Default is 1. LV_ANIM_REPEAT_INFINITE for infinite repetition*/
lv_anim_set_repeat_count(&anim1, LV_ANIM_REPEAT_INFINITE);
/*Delay before repeat. Default is 0 (disabled) [ms]*/
lv_anim_set_repeat_delay(&anim1, 0);
/*true (default): apply the start vale immediately, false: apply start vale after delay when then anim. really starts. */
lv_anim_set_early_apply(&anim1, true);
/* START THE ANIMATION
*------------------*/
lv_anim_start(&anim1); /*Start the animation*/
// anim2 = anim1;
// lv_anim_set_values(&anim1, 100, 00);
// lv_anim_start(&anim1);
// lv_scr_load_anim(scr2,LV_SCR_LOAD_ANIM_FADE_ON,1000,0,false);
// sw = lv_switch_create(lv_scr_act());
// lv_obj_align(sw,LV_ALIGN_CENTER,0,0);
效果如图所示:
另外实现了鼠标滚轮应用,简单的小demo,两个页面的切换:
static lv_indev_data_t data_mouse;
static int8_t flag=1;
mousewheel_read(&indev_drv_mouse, &data_mouse);
if(data_mouse.enc_diff>0&&flag==0)
{
lv_scr_load_anim(scr1,LV_SCR_LOAD_ANIM_OVER_BOTTOM,1000,0,false);
flag=1;
return;
}
else if(data_mouse.enc_diff<0&&flag==1)
{
lv_scr_load_anim(scr2,LV_SCR_LOAD_ANIM_OVER_TOP,1000,0,false);
flag=0;
return;
}
return;