LVGL笔记19–lv_sw开关
lv_sw开关本质是一个缩小版的lv_slider滑块控件,lv_sw控件具有开和关两种状态;
点击这个开关控件
滑动这个开关控件,它会根据滑动的位置来自动决定状态的。
使用lv_sw_on(sw, LV_ANIM_ON/OFF), lv_sw_off(sw, LV_ANIM_ON/OFF), lv_sw_toggle(sw, LV_ANOM_ON/OFF)等 API 接口来改变其状态
当 其 状 态 发 生 改 变 后 , 它会给它的事件回调函数发送一个LV_EVENT_VALUE_CHANGED 事件.但这里有一点需要注意一下,如果你是通过调用lv_sw_on, lv_sw_off, lv_sw_toggle 等接口来改变开关状态的话 , 它是不会发送 LV_EVENT_VALUE_CHANGED 事件的.
主要数据类型
enum {
LV_SW_STYLE_BG,
LV_SW_STYLE_INDIC,
LV_SW_STYLE_KNOB_OFF,
LV_SW_STYLE_KNOB_ON,
};
typedef uint8_t lv_sw_style_t;
LV_SW_STYLE_BG: 开关的背景样式,使用样式中的 style.body 字段,其中的 padding 字段用来设置背景边框与旋钮边框之间的距离
LV_SW_STYLE_INDIC: 开关的指示器样式,使用样式中的 style.body 字段,其中的 padding字段设置指示器与背景边框之间的距离
LV_SW_STYLE_KNOB_OFF: 开关处于关闭状态时的旋钮样式,使用样式中的style.body字段,但是其内部的 padding 字段除外
LV_SW_STYLE_KNOB_ON: 开关处于打开状态时的旋钮样式,使用样式中的 style.body 字 段,但是其内部的 padding 字段除外
lv_sw 开关样式的使用和 lv_slider 滑块样式的使用基本是一样的,唯一的区别就是 lv_sw上的旋钮具有 2 种样式,分别对应开和关俩种状态
API函数接口
-
创建对象
/*------------------------------------------------------------------------------- 这个函数用来创建lv_sw对象 par: 父对象 copy: 拷贝的对象,如果无拷贝的话,传 NULL 值 返回值: 返回创建出来的对象,如果返回 NULL 的话,说明堆空间不够了 ---------------------------------------------------------------------------------*/ lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy);
-
设置为打开状态
/*------------------------------------------------------------------------------- 这个函数用来设置lv_sw对象打开状态(注意此 API 接口不会触发 LV_EVENT_VALUE_CHANGED 事件) sw: 开关对象 anim: 在切换到打开状态时,是否使能动画效果,有 2 个可选值如下: LV_ANIM_OFF: 不使能动画效果 LV_ANIM_ON: 使能动画效果 ---------------------------------------------------------------------------------*/ void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim);
-
设置为关闭状态
/*------------------------------------------------------------------------------- 这个函数用来设置lv_sw对象关闭状态(注意此 API 接口不会触发 LV_EVENT_VALUE_CHANGED 事件) sw: 开关对象 anim: 在切换到打开状态时,是否使能动画效果,有 2 个可选值如下: LV_ANIM_OFF: 不使能动画效果 LV_ANIM_ON: 使能动画效果 ---------------------------------------------------------------------------------*/ void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim);
-
反转当前状态
/*------------------------------------------------------------------------------- 这个函数用来反转lv_sw对象开关状态(注意此 API 接口不会触发 LV_EVENT_VALUE_CHANGED 事件) sw: 开关对象 anim: 在切换到打开状态时,是否使能动画效果,有 2 个可选值如下: LV_ANIM_OFF: 不使能动画效果 LV_ANIM_ON: 使能动画效果 返回值:返回开关反转后的状态,true 代表为打开状态,false 代表关闭状态 ---------------------------------------------------------------------------------*/ bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim);
-
设置样式
/*------------------------------------------------------------------------------- 这个函数用来设置lv_sw对象样式 sw: 开关对象 type: 设置哪一个部件的样式,有如下 4 个可选值: LV_SW_STYLE_BG: 设置背景的样式 LV_SW_STYLE_INDIC: 设置指示器的样式 LV_SW_STYLE_KNOB_OFF: 设置开关处于关闭状态时的旋钮样式 LV_SW_STYLE_KNOB_ON: 设置开关处于打开状态时的旋钮样式 style: 样式 ---------------------------------------------------------------------------------*/ void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style);
-
设置动画时长
/*-------------------------------------------------------------------------------- sw: 开关对象 好像不太好用 ---------------------------------------------------------------------------------*/ void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time);
-
获取开关的状态
/*-------------------------------------------------------------------------------- 这个函数用来获取对象的开关状态 sw: 开关对象 返回值:返回true代表开关处于开状态,返回false代表开关处于关闭状态 ---------------------------------------------------------------------------------*/ static inline bool lv_sw_get_state(const lv_obj_t * sw);
2021–2--16–wrs