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、按键控制逻辑
相关推荐
Yyyyyy~6 分钟前
【Mysql】增删查改操作
数据库·mysql
旋律41442 分钟前
同义方法区别(增加类与删除类)
java·后端
钱栈up43 分钟前
前端改了三页、后端也动了,用户说「完全没变化」——我在 116 库上找到的三个真凶
css·数据库
学到老活到老44 分钟前
方法执行完了,对象为什么还占着内存?
java·jvm
用户7771298509121 小时前
常见的同义方法的区别:增加类和删除类
java·后端
十年Java程序媛1 小时前
Java this 与 super 详解|继承高频踩坑 + 面试题整理
java·spring boot·面试
这个DBA有点耶1 小时前
索引建了查询却更慢——优化器选错索引与Index Merge的隐藏代价
数据库·架构·代码规范
用户7771298509121 小时前
Stream流式使用
java
旋律4141 小时前
List、Set、Map:三个装数据的容器,到底啥区别?怎么遍历?
java·后端