lvgl 笔记 按钮部件 (lv_btn) 和 开关部件 (lv_switch)
创始人
2024-05-31 06:08:51
0

按钮基础使用方法:

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() 做出与之相反的动作。

 

相关内容

热门资讯

我喜欢的小动物作文【实用6篇... 我喜欢的小动物作文 篇一我喜欢的小动物是松鼠。每次看到它们在树上迅速爬行,我总会被它们的灵活和机敏所...
杭州游之虎跑公园小学作文【经... 杭州游之虎跑公园小学作文 篇一我最喜欢的杭州景点之一就是虎跑公园。这个公园坐落在风景如画的西湖边,是...
“日”字变形记小学作文【推荐... “日”字变形记小学作文 篇一太阳的日子我喜欢太阳,因为它给了我们光明和温暖。太阳每天都会升起,照亮大...
小小的欲望作文350字(最新... 篇一:小小的欲望小小的欲望作文350字 篇一小小的欲望,是我们内心深处微不可见的火花,它时而燃烧得熊...
奇思妙想的作文400字(精选... 奇思妙想的作文400字 篇一标题:梦幻的花园我有一个奇妙的梦想,梦见自己拥有了一个令人惊叹的花园。这...
成长的烦恼四年级作文【优秀5... 成长的烦恼四年级作文 篇一成长的烦恼我是一名四年级的学生,正在经历着成长的烦恼。在成长的道路上,我遇...
爱人的作文【最新3篇】 爱人的作文 篇一爱人的作文我有一个特别重要的人,那就是我的爱人。他是我生命中最亲密的伴侣,也是我最深...
中秋之夜的小学作文500字 中秋之夜的小学作文500字  中秋节已悄悄的离我们近了,近了,此时我的心情又怎能不振奋呢?面临三天的...
有你真好的作文(最新6篇) 有你真好的作文 篇一爱与陪伴人生中,有太多的瞬间让我感受到了你的好。你是我最亲近的人,也是我最信任的...
火烧云小学作文【最新6篇】 火烧云小学作文篇一:火烧云的美丽火烧云是一种非常美丽的自然景观,它们在天空中绽放出绚丽的色彩,给人们...
人间自有温情在作文(精简3篇... 人间自有温情在作文 篇一温情的力量人间自有温情,在日常生活中,我们时常能够感受到这种力量。温情是指人...
小学三年级抗疫情作文(精简5... 小学三年级抗疫情作文 篇一:我们一起抗疫,共克时艰新冠疫情的突然爆发给全世界带来了巨大的挑战,人们的...
有你真好的作文(通用6篇) 有你真好的作文 篇一有你真好每个人的生活中都会有那么一个重要的人,他们的存在让我们的生活变得更加美好...
我上学了(优选3篇) 我上学了 篇一我上学了已经有好几年了,回想起来,这段时光仿佛就在眨眼间过去了。刚开始上学的时候,我还...
有趣的游戏小学作文400字【... 有趣的游戏小学作文400字 篇一标题:童年乐园——躲猫猫游戏在我心中,有一个让我欢乐无比的游戏,那就...
那次玩得真高兴作文(优秀5篇... 那次玩得真高兴作文 篇一那次玩得真高兴上个周末,我和我的朋友们一起去了游乐园玩,那次真是玩得太高兴了...
初一七年级学生作文题目【优选... 初一七年级学生作文题目 篇一我的暑假计划暑假即将来临,我对未来的两个月充满了期待和计划。今年的暑假,...
假如考上了名校,我要回来看看... 假如考上了名校,我要回来看看我的母校小学作文 篇一当我考上了名校,我内心感到无比的兴奋和自豪。这是我...
校园桂花香小学作文【最新3篇... 校园桂花香小学作文 篇一校园桂花香小学作文我所在的学校是一所名为桂花香小学的学校,这个名字来源于学校...
春天小学一年级作文300字(... 春天小学一年级作文300字 篇一春天的花儿春天是一个美丽的季节,大地万物都在春天苏醒,充满了生机和活...