立即注册 找回密码

微雪课堂

搜索

树莓派littlevGL系列教程:日历控件(lv_calendar)

2019-11-18 23:31| 发布者: imliubo| 查看: 8156| 评论: 0|原作者: IAMLIUBO

摘要: Hi,大家好,欢迎来到树莓派之littlevGL课堂,我们在上节课中学习了按钮控件(lv_btn),本节课带大家来学习一下日历控件,废话不多说,先看图!想不想做一个像上面一样的日历呢?不要觉得可以随意的切换月份很复杂, ...
Hi,大家好,欢迎来到树莓派之littlevGL课堂,我们在上节课中学习了按钮控件(lv_btn),本节课带大家来学习一下日历控件,废话不多说,先看图!
一 有图有真相

想不想做一个像上面一样的日历呢?不要觉得可以随意的切换月份很复杂,这一切你都不需要关心,因为littlevGL已经帮你做好一切了,你需要做的就是创建一个日历控件,然后设置一下日期就可以,当然你也可以做一个电子日历,时时校准并更新日期,后面再随着我们学习的深入可以再加上时间的显示,这样电子日历就更加完善了,不过这一切都需要你一步一步的跟着教程好好学习,那么接下来让我们分析一下代码吧!
二 代码分析
用户可下载"圆弧对象(lv_arc)的使用"文章末尾的Demo工程(点击我直接下载),参考圆弧对象(lv_arc)的使用文章,将以下Demo代码复制到Demo工程test.c文件空白处.然后在test.c文件的create_test()函数中增加calendar_test()函数测试。
static void calender_event_handler(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED) {
        lv_calendar_date_t * date = lv_calendar_get_pressed_date(obj);
        if(date) {
            lv_calendar_set_today_date(obj, date);
        }
    }
}

static void calendar_test(void)
{
    lv_obj_t  * calendar = lv_calendar_create(lv_scr_act(), NULL);
    lv_obj_set_size(calendar, 230, 230);
    lv_obj_align(calendar, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_event_cb(calendar, calender_event_handler);

    /*Set the today*/
    lv_calendar_date_t today;
    today.year = 2019;
    today.month = 11;
    today.day = 18;

    lv_calendar_set_today_date(calendar, &today);
    lv_calendar_set_showed_date(calendar, &today);

    /*Highlight some days*/
    static lv_calendar_date_t highlihted_days[1];       /*Only it's pointer will be saved so should be static*/
    highlihted_days[0].year = 2019;
    highlihted_days[0].month = 11;
    highlihted_days[0].day = 11;

    lv_calendar_set_highlighted_dates(calendar, highlihted_days, 1);
}
可以看到代码相比之前别的控件流程还是基本一致的,我们这里重点分析一下lv_calendar_date_t结构体和lv_calendar_set_today_date、lv_calendar_set_showed_date、lv_calendar_set_highlighted_dates这三个函数。
typedef struct
{
    uint16_t year;
    int8_t month;
    int8_t day;
} lv_calendar_date_t;
这个结构体也是相对来说非常简单的,就三个结构体成员分别是年份、月份和日期,我们可以通过这个结构体去设置我们要特殊设置的某一天具体的日期。
然后我们再看一下上面说的三个函数的原型:
void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * today);
void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showed);
void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t * highlighted, uint16_t date_num);
其实这里单看函数名我们就能大概知道这个函数是做什么的,所以以后我们做开发的时候,函数名就是最好的注释,因为这是直接的展示,不是去翻这个函数原型然后再查看函数的注释。
lv_calendar_set_today_date就是设置当前日期,说白了就是今天是那一天,然后lv_calendar_set_showed_date这个是要显示的日期,假如我们不设置要显示的日期,会默认从2018年1月份开始显示。然后lv_calendar_set_highlighted_dates是将某一天的日期高亮,就跟我们平常看日历节假日都会高亮一样,大家可以更换上面的日期进行测试,相对来说这个控件的使用还是非常简单的,大家有没有学会呢?

OK,这就是本节课我们要学习的内容了,下一节课我们学习画布控件,大家对画布有哪些了解呢?我们下一节课见!

282

顶一下

刚表态过的朋友 (282 人)

相关阅读

最新评论

Arduino
基础入门
OpenCV
littleGL

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2024-11-22 13:04 , Processed in 0.025419 second(s), 18 queries .

返回顶部