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、按键控制逻辑
相关推荐
吾日三省吾码1 小时前
JVM 性能调优
java
弗拉唐2 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
sun0077002 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
oi772 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
BestandW1shEs2 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师3 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球3 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...3 小时前
表的操作(MySQL)
数据库·mysql·表的操作