• LVGL_基础控件Switch_Button


    LVGL_基础控件Switch_Button

    1、创建switch_button

    在这里插入图片描述

    /* 创建一个 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:让对象居中,较为灵活
    
    • 1
    • 2
    • 3
    • 4
    2、修改未选中背景颜色

    在这里插入图片描述

    在这里插入图片描述

    lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_MAIN);
    
    • 1
    3、修改盒子内颜色大小

    在这里插入图片描述
    在这里插入图片描述

    lv_obj_set_style_pad_all(sw, 5, LV_PART_MAIN);
    lv_obj_set_style_pad_left(sw, 10, LV_PART_MAIN);//只修改左侧
    
    • 1
    • 2
    4、设置背景透明度和背景颜色
    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);
    
    • 1
    • 2
    5、修改选中状态下的控件背景色

    在这里插入图片描述

    lv_obj_set_style_bg_color(sw, lv_color_hex(0x7719aa), LV_PART_INDICATOR | LV_STATE_CHECKED);
    
    • 1
    6、修改中间旋钮的颜色

    在这里插入图片描述

    lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_KNOB);
    
    • 1
    7、修改控件大小

    在这里插入图片描述

    // 修改开关对象的大小,注意比例不能是 1:1 (比如:宽高都是100),否则只能看到一个大圆
    lv_obj_set_size(sw, 200, 100);
    
    • 1
    • 2
    8、默认让控件处于选中的状态
    lv_obj_clear_state(sw, LV_STATE_CHECKED);// 关
    lv_obj_add_state(sw, LV_STATE_CHECKED);// 开关默认处于关闭状态,这里设置为打开状态
    
    • 1
    • 2
    9、让控件保持当前状态不允许更改

    在这里插入图片描述

    lv_obj_clear_state(sw, LV_STATE_CHECKED);// 关
    lv_obj_add_state(sw, LV_STATE_DISABLED);   // 当前状态是关,并且不可更改
    
    • 1
    • 2

    在这里插入图片描述

    lv_obj_add_state(sw, LV_STATE_CHECKED | LV_STATE_DISABLED);   // 当前状态是开,并且不可更改
    
    • 1
    10、添加事件
    // 添加事件,当我们点击开关,改变开关的状态时,会触发 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");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    11、清除禁用状态
    // 清除禁用状态,一般由其他部件(外部)清除
    lv_obj_clear_state(sw, LV_STATE_DISABLED);       // 清除禁用状态,按钮可正常使用
    
    • 1
    • 2
    12、按键控制逻辑

    在这里插入图片描述

  • 相关阅读:
    【心电信号】小波阙值心电信号去噪【含Matlab源码 2188期】
    初始Redis(入门篇)
    .NET 8 性能比 .NET 7 大幅提升
    鸿蒙 - 读取 rawfile 中的 json 文件
    基于Spring Boot应用JdbcTemplate操作数据库(查增改删)
    使用python压缩文件夹
    【推荐系统】推荐系统(RS)与大模型(LLM)的结合
    微服务·架构组件之网关
    公司员工微信如何管理?
    mac的Jupyter怎么使用
  • 原文地址:https://blog.csdn.net/weixin_50183638/article/details/133578254