lvgl+QT仿真

本文介绍了使用LVGL图形库创建一个包含图片、汉字输出和动画效果的界面。通过将TrueType字体转换为C字体,实现了汉字显示。同时,利用鼠标滚轮实现了页面切换的交互功能。涉及的技术点包括界面布局、字体样式、动画效果和滚轮事件处理。
摘要由CSDN通过智能技术生成

最近在搞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;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值