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); } 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,这就是本节课我们要学习的内容了,下一节课我们学习画布控件,大家对画布有哪些了解呢?我们下一节课见! |