LVGL笔记19–lv_sw开关

本文详细介绍了LVGL库中的lv_sw开关控件,包括其工作原理、使用API(如lv_sw_on、lv_sw_off和lv_sw_toggle)以及样式设置。重点讲解了如何创建、切换状态和自定义样式,适合LVGL开发者学习和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LVGL笔记19–lv_sw开关

lv_sw开关本质是一个缩小版的lv_slider滑块控件,lv_sw控件具有开和关两种状态;

  1. 点击这个开关控件

  2. 滑动这个开关控件,它会根据滑动的位置来自动决定状态的。

  3. 使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值