LVGL_基础控件Switch_Button

LVGL_基础控件Switch_Button

1、创建switch_button
c 复制代码
/* 创建一个 switch 部件(对象) */
lv_obj_t * sw = lv_switch_create(lv_scr_act());       // 创建一个 switch 部件(对象),他的父对象是活动屏幕对象
lv_obj_center(sw);                                    // 方法1:让对象居中,简洁
//lv_obj_align(sw, LV_ALIGN_CENTER, 0, 0);            // 方法2:让对象居中,较为灵活
2、修改未选中背景颜色
c 复制代码
lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_MAIN);
3、修改盒子内颜色大小


c 复制代码
lv_obj_set_style_pad_all(sw, 5, LV_PART_MAIN);
lv_obj_set_style_pad_left(sw, 10, LV_PART_MAIN);//只修改左侧
4、设置背景透明度和背景颜色
c 复制代码
lv_obj_set_style_bg_opa(sw, 10, LV_PART_INDICATOR);
lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_INDICATOR);
5、修改选中状态下的控件背景色
c 复制代码
lv_obj_set_style_bg_color(sw, lv_color_hex(0x7719aa), LV_PART_INDICATOR | LV_STATE_CHECKED);
6、修改中间旋钮的颜色
c 复制代码
lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_KNOB);
7、修改控件大小
c 复制代码
// 修改开关对象的大小,注意比例不能是 1:1 (比如:宽高都是100),否则只能看到一个大圆
lv_obj_set_size(sw, 200, 100);
8、默认让控件处于选中的状态
c 复制代码
lv_obj_clear_state(sw, LV_STATE_CHECKED);// 关
lv_obj_add_state(sw, LV_STATE_CHECKED);// 开关默认处于关闭状态,这里设置为打开状态
9、让控件保持当前状态不允许更改
c 复制代码
lv_obj_clear_state(sw, LV_STATE_CHECKED);// 关
lv_obj_add_state(sw, LV_STATE_DISABLED);   // 当前状态是关,并且不可更改
c 复制代码
lv_obj_add_state(sw, LV_STATE_CHECKED | LV_STATE_DISABLED);   // 当前状态是开,并且不可更改
10、添加事件
c 复制代码
// 添加事件,当我们点击开关,改变开关的状态时,会触发 LV_EVENT_VALUE_CHANGED 事件类型
// 当然我们可以处理他触发的其他事件类型,比如: LV_EVENT_CLICKED
lv_obj_add_event_cb(sw, sw_event_handler, LV_EVENT_VALUE_CHANGED, NULL);

static void sw_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *sw = lv_event_get_target(e);

    if (code == LV_EVENT_VALUE_CHANGED)
    {
        // 判断开关状态
        /* 方式1 */
        // 返回 bool 类型, 开-1 ; 关-2
        //if(lv_obj_has_state(sw, LV_STATE_CHECKED))
        //    LV_LOG_USER("ON!");
        //else
        //    LV_LOG_USER("OFF!");

        // 更简介的写法
        LV_LOG_USER("State: %s", lv_obj_has_state(sw, LV_STATE_CHECKED) ? "ON" : "OFF");


        /* 方式2 */
        //if(lv_obj_get_state(sw) & LV_STATE_CHECKED)
        //    LV_LOG_USER("ON!");
        //else
        //    LV_LOG_USER("OFF!");
        //LV_LOG_USER("State: %s", (lv_obj_get_state(sw) & LV_STATE_CHECKED) ? "ON" : "OFF");
    }
}
11、清除禁用状态
c 复制代码
// 清除禁用状态,一般由其他部件(外部)清除
lv_obj_clear_state(sw, LV_STATE_DISABLED);       // 清除禁用状态,按钮可正常使用
12、按键控制逻辑
相关推荐
熙客5 分钟前
Java8:Lambda表达式
java·开发语言
小咕聊编程9 分钟前
【含文档+PPT+源码】基于java web的篮球馆管理系统系统的设计与实现
java·开发语言
羑悻的小杀马特11 分钟前
从零搭建群晖私有影音库:NasTool自动化追剧全流程拆解与远程访问协议优化实践
运维·数据库·自动化
后端小张23 分钟前
【JAVA 进阶】Mybatis-Plus 实战使用与最佳实践
java·spring boot·spring·spring cloud·tomcat·mybatis·mybatis plus
崎岖Qiu25 分钟前
【设计模式笔记07】:迪米特法则
java·笔记·设计模式·迪米特法则
TDengine (老段)2 小时前
杨凌美畅用 TDengine 时序数据库,支撑 500 条产线 2 年历史数据追溯
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
摇滚侠2 小时前
Spring Boot3零基础教程,SpringApplication 自定义 banner,笔记54
java·spring boot·笔记
青云交2 小时前
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用
java·大数据·机器学习·数据存储·模型构建·游戏用户行为分析·游戏平衡优化
暗武逢天5 小时前
Java导出写入固定Excel模板数据
java·导出数据·easyexcel·excel固定模板导出
葛小白15 小时前
C#数据类型:string简单使用
服务器·数据库·c#