Hi,大家好,欢迎来到树莓派之littlevGL课堂,我们在上节课中学习了按钮控件(lv_btn),本节课带大家来学习一下矩阵按钮控件,废话不多说! 一 有图有真相 先看图! 就像上图一样,矩形按钮控件其实就是很多个单按钮的组合,利用这个控件我们可以很方便的生成像上面的矩阵键盘,就比如我们做一个上面的数字键盘,而不是一个个的去生成,然后再算坐标,然后偏移多少多少之类的。总之我们使用这个控件可以快速且方便的生成很多按钮,废话不多说。 二 代码分析 用户可下载"圆弧对象(lv_arc)的使用"文章末尾的Demo工程(点击我直接下载),参考圆弧对象(lv_arc)的使用文章,将以下Demo代码复制到Demo工程test.c文件空白处.然后在test.c文件的create_test()函数中增加btnm_test()函数测试。 我们来看代码: static void btm_event_handler(lv_obj_t * obj, lv_event_t event) { if(event == LV_EVENT_VALUE_CHANGED) { const char * txt = lv_btnm_get_active_btn_text(obj); printf("%s was pressed\n", txt); } } static const char * btnm_map[] = {"1", "2", "3", "4", "5", "\n", "6", "7", "8", "9", "0", "\n", "Action1", "Action2", ""}; static void btnm_test(void) { lv_obj_t * btnm1 = lv_btnm_create(lv_scr_act(), NULL); lv_btnm_set_map(btnm1, btnm_map); lv_btnm_set_btn_width(btnm1, 10, 2); /*Make "Action1" twice as wide as "Action2"*/ lv_obj_align(btnm1, NULL, LV_ALIGN_CENTER, 0, 0); lv_obj_set_event_cb(btnm1, btm_event_handler); } 然后lv_btnm_set_btn_width这里是设置其中某一个按钮的相对宽度的,这里的相对宽度指的是相对于矩阵键盘内的下一个对象的,然后同样的这里我们也设置一个回调函数,用于处理我们键盘内的每个按钮按下的事件: static void btm_event_handler(lv_obj_t * obj, lv_event_t event) { if(event == LV_EVENT_VALUE_CHANGED) { const char * txt = lv_btnm_get_active_btn_text(obj); printf("%s was pressed\n", txt); } } OK,这就是本节课我们要学习的内容了,下一节课我们学习日历控件,教大家如何快速生成一个日历图标,我们下一节课见! |