lvgl 笔记 按钮部件 (lv |
您所在的位置:网站首页 › driverselect开关按钮怎么选择 › lvgl 笔记 按钮部件 (lv |
按钮基础使用方法:
lv_btn 和 lb_obj 使用方法一样,只是外表并不相同,基础创建方法只需一行代码。 lv_obj_t* btn = lv_btn_create(lv_scr_act()); 添加大小和位置: lv_obj_t* btn = lv_btn_create(lv_scr_act()); lv_obj_set_size(btn, 100, 50); lv_obj_set_align(btn, LV_ALIGN_CENTER); 添加触发样式:在 lv_obj_set_style_bg_color() 配置为,LV_STATE_PRESSED 即可配置为按下改变颜色。 其中和 lv_obj 一样,共有以下可供选择的参数: lv_obj_t* btn = lv_btn_create(lv_scr_act()); lv_obj_set_size(btn, 100, 50); lv_obj_set_align(btn, LV_ALIGN_CENTER); lv_obj_set_style_bg_color(btn, lv_color_hex(0xffe1d4), LV_STATE_PRESSED); 添加事件:lv_obj_add_event_cb(); 可以添加事件。 static void event_cb(lv_event_cb_t* e) { lv_event_code_t code = lv_event_get_code(e); if (code == LV_EVENT_VALUE_CHANGED) { printf("LV_EVENT_VALUE_CHANGED\n"); } } void my_gui(void){ lv_obj_t* btn = lv_btn_create(lv_scr_act()); lv_obj_add_flag(btn, LV_OBJ_FLAG_CHECKABLE); lv_obj_add_event_cb(btn, event_cb, LV_EVENT_VALUE_CHANGED, NULL); } 开关基础使用方法: lv_obj_t* switch1 = lv_switch_create(lv_scr_act()); 为开关部件配置颜色:开关部件共有三个部分可以单独配置颜色,主体是指未被选中状态(下图中灰色),手柄指的是圆球部分,指示器则是选中部分(下图中蓝色)。 lv_obj_t* switch1 = lv_switch_create(lv_scr_act()); lv_obj_set_style_bg_color(switch1, lv_color_hex(0xea1b1b), LV_PART_MAIN); lv_obj_set_pos(switch1, 0, 0); lv_obj_t* switch2 = lv_switch_create(lv_scr_act()); lv_obj_set_style_bg_color(switch2, lv_color_hex(0xea1b1b),LV_PART_KNOB); lv_obj_set_pos(switch2, 0, 50); lv_obj_t* switch3 = lv_switch_create(lv_scr_act()); lv_obj_set_style_bg_color(switch3, lv_color_hex(0xea1b1b), LV_STATE_CHECKED|LV_PART_INDICATOR); lv_obj_set_pos(switch3, 0, 100);
值得注意的是,在设置 LV_PART_INDICATOR 指示器时,完整的写法应与上 LV_STATE_CHECKED,不然配置的样式就会被覆盖,导致不生效。 lv_obj_set_style_bg_color(switch3, lv_color_hex(0xea1b1b), LV_STATE_CHECKED|LV_PART_INDICATOR); 修改开关状态:按钮状态默认是关闭的,如果我们使用 lv_obj_add_state() 函数即可为按钮添加一个选中的状态,这样他在第一次运行时就是打开状态。 lv_obj_t* switch1 = lv_switch_create(lv_scr_act()); lv_obj_set_pos(switch1, 0, 0); lv_obj_t* switch2 = lv_switch_create(lv_scr_act()); lv_obj_add_state(switch2, LV_STATE_CHECKED); lv_obj_set_pos(switch2, 0, 50);如果要让按钮不被选中,我们可以再移除这个状态:lv_obj_clear_state() 即可做到 lv_obj_clear_state(switch2, LV_STATE_CHECKED);除了修改 LV_STATE_CHECKED 状态外,另一个 LV_STATE_DISABLED 状态也经常使用,他的作用的使得按钮不能被修改。 捕捉按钮状态:lv_obj_has_state() 函数可以返回当前组件的状态。在以下代码中,我们使用了: lv_obj_has_state(switch1, LV_STATE_CHECKED)来返回选中状态。其原理是检查 LV_STATE_CHECKED 的状态判断的。 static void event_cb(lv_event_t* e) { lv_event_code_t code = lv_event_get_code(e); if (lv_obj_has_state(switch1, LV_STATE_CHECKED)) { printf("LED ON \n"); } else { printf("LED OFF \n"); } } void my_gui(void) { switch1 = lv_switch_create(lv_scr_act()); lv_obj_add_event_cb(switch1, event_cb, LV_EVENT_VALUE_CHANGED, NULL); //对象的值改变即触发回调 }效果如下: 互斥锁案例: static void event_cb(lv_event_t* e) { lv_obj_t* target = lv_event_get_target(e); //获得触发的基本对象 if (target == switch1) { if (lv_obj_has_state(switch1, LV_STATE_CHECKED)) lv_obj_clear_state(switch2, LV_STATE_CHECKED); else lv_obj_add_state(switch2, LV_STATE_CHECKED); } if (target == switch2) { if (lv_obj_has_state(switch2, LV_STATE_CHECKED)) lv_obj_clear_state(switch1, LV_STATE_CHECKED); else lv_obj_add_state(switch1, LV_STATE_CHECKED); } } void my_gui(void) { switch1 = lv_switch_create(lv_scr_act()); lv_obj_add_event_cb(switch1, event_cb, LV_EVENT_VALUE_CHANGED, NULL); switch2 = lv_switch_create(lv_scr_act()); lv_obj_add_state(switch2, LV_STATE_CHECKED); lv_obj_set_pos(switch2, 0, 50); lv_obj_add_event_cb(switch2, event_cb, LV_EVENT_VALUE_CHANGED, NULL); }原理是当设置了一个按钮之后,就对另一个按钮通过配置 lv_obj_add_state() 和 lv_obj_clear_state() 做出与之相反的动作。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |