用户工具

站点工具


icore4tlvgl_14
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-12-4 yang 初次建立

实验十四:lv_switch开关

一、开关

复选框开关可用于打开/关闭某物,实现的效果与选中使能状态下的按钮类似。它看起来像一个小滑块。

开关由以下部分组成:

  • LV_SWITCH_PART_BG : 主要部分
  • LV_SWITCH_PART_INDIC :指示器(虚拟部分)
  • LV_SWITCH_PART_KNOB :旋钮(虚拟部分)

小部件和样式的工作原理与滑块相同。阅读其文档以获取详细说明。

二、改变状态

开关的状态可以通过点击它来改变,也可以使用函数 lv_switch_on(switch, LV_ANIM_ON/OFF)、lv_switch_off(switch, LV_ANIM_ON/OFF)、lv_switch_toggle(switch, LV_ANOM_ON/OFF) 来改变开关状态。 若想改变开关状态切换时的动画速度,可以通过 lv_switch_set_anim_time(switch, anim_time) 进行调整。

三、事件

除通用事件外,交换机还会发送以下特殊事件:

  • LV_EVENT_VALUE_CHANGED 当开关更改状态时发送。
  • LV_KEY_UP,LV_KEY_RIGHT 打开滑块。
  • LV_KEY_DOWN,LV_KEY_LEFT 关闭滑块。

#include <board.h>                                                /* 操作GPIO加载头文件 */
#define LED0_PIN    GET_PIN(A, 10)                              /* iCore4T LED引脚为PA10 */
lv_obj_t * label;                                                 /* 先定义标签label */
lv_obj_t *sw1;                                                    /*定义标签label */
static void event_handler(lv_obj_t * obj, lv_event_t event)   /* 回调函数 */
{
	if(event == LV_EVENT_VALUE_CHANGED) {                      /* 按键状态切换的话 */
		if(lv_switch_get_state(sw1) == false){                /* 判断开关状态 */
			rt_pin_write(LED0_PIN, PIN_HIGH);
			lv_label_set_text(label, "LED off");                /* 更新标签内容 */
		}else{
			rt_pin_write(LED0_PIN, PIN_LOW);
			lv_label_set_text(label, "LED on");
                }
	}
}
void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                        /* 初始化lvgl2rtt */
 
	rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);                   /* 设置LED为推挽输出 */
	rt_pin_write(LED0_PIN, PIN_HIGH);                           /* LED默认关闭 */
 
	sw1 = lv_switch_create(lv_scr_act(), NULL);    /* 创建开关 */
	lv_obj_align(sw1, NULL, LV_ALIGN_CENTER, 0, 0);            /* 设置开关位置 */
	lv_obj_set_event_cb(sw1, event_handler);                     /* 设置回调函数 */
	lv_obj_set_size(sw1, 30, 20);                                  /* 设置开关尺寸 */
        lv_switch_off(sw1,LV_ANIM_OFF);                                /*设置开关状态*/
 
	label = lv_label_create(lv_scr_act(), NULL);                 /* 创建标签 */
	lv_label_set_text(label, "LED off");                           /* 设置标签默认内容 */
	lv_obj_align(label, sw1, LV_ALIGN_OUT_LEFT_MID, -10, 0);   /* 设置标签位置 */
}
icore4tlvgl_14.txt · 最后更改: 2022/04/01 11:13 由 sean