LVGL lv_event事件(10)

lv_events

LVGL 中任何对象都可以注册事件,相关类型在lv_obj.h中枚举

enum {
    LV_EVENT_PRESSED,             /**< The object has been pressed*/
    LV_EVENT_PRESSING,            /**< The object is being pressed (called continuously while pressing)*/
    LV_EVENT_PRESS_LOST,          /**< User is still pressing but slid cursor/finger off of the object */
    LV_EVENT_SHORT_CLICKED,       /**< User pressed object for a short period of time, then released it. Not called if dragged. */
    LV_EVENT_LONG_PRESSED,        /**< Object has been pressed for at least `LV_INDEV_LONG_PRESS_TIME`.  Not called if dragged.*/
    LV_EVENT_LONG_PRESSED_REPEAT, /**< Called after `LV_INDEV_LONG_PRESS_TIME` in every
                                       `LV_INDEV_LONG_PRESS_REP_TIME` ms.  Not called if dragged.*/
    LV_EVENT_CLICKED,             /**< Called on release if not dragged (regardless to long press)*/
    LV_EVENT_RELEASED,            /**< Called in every cases when the object has been released*/
    LV_EVENT_DRAG_BEGIN,
    LV_EVENT_DRAG_END,
    LV_EVENT_DRAG_THROW_BEGIN,
    LV_EVENT_GESTURE,           /**< The object has been gesture*/
    LV_EVENT_KEY,
    LV_EVENT_FOCUSED,
    LV_EVENT_DEFOCUSED,
    LV_EVENT_LEAVE,
    LV_EVENT_VALUE_CHANGED,      /**< The object's value has changed (i.e. slider moved) */
    LV_EVENT_INSERT,
    LV_EVENT_REFRESH,
    LV_EVENT_APPLY,  /**< "Ok", "Apply" or similar specific button has clicked*/
    LV_EVENT_CANCEL, /**< "Close", "Cancel" or similar specific button has clicked*/
    LV_EVENT_DELETE, /**< Object is being deleted */
    _LV_EVENT_LAST /** Number of events*/
};
typedef uint8_t lv_event_t; /**< Type of event being sent to the object. */

例子

#define USER_EVENT_1 (_LV_EVENT_LAST+1) //用户自定义事件 1
static void btn_event_cb(lv_obj_t * obj, lv_event_t event)
{
	if (event == LV_EVENT_PRESSED)
	{
		//对象被按下时触发,每次按下时只触发一次
		printf("LV_EVENT_PRESSED\r\n");
	}
	else if (event == LV_EVENT_PRESSING)
	{
		//对象正在被按下中,只要按下不放,就会一直被触发
		printf("LV_EVENT_PRESSING\r\n");
	}
	else if (event == LV_EVENT_PRESS_LOST)
	{
		//在按下的过程中,手指从对象的可视区域划出时被触发
		printf("LV_EVENT_PRESS_LOST\r\n");
	}
	else if (event == LV_EVENT_SHORT_CLICKED)
	{
		//在 LV_INDEV_LONG_PRESS_TIME 时间之前松手触发,如果是
		//在被拖拽的话,则不会被触发
		printf("LV_EVENT_SHORT_CLICKED\r\n");
	}
	else if (event == LV_EVENT_LONG_PRESSED)
	{
		//按下时长超过 LV_INDEV_LONG_PRESS_TIME 值时触发,
		//只会触发一次,如果是在被拖拽的话,则不会被触发
		printf("LV_EVENT_LONG_PRESSED\r\n");
	}
	else if (event == LV_EVENT_LONG_PRESSED_REPEAT)
	{
		//在触发 LV_EVENT_LONG_PRESSED 事件之后,接
		//下来按下的时长每超过 LV_INDEV_LONG_PRESS_REP_TIME 值一次,就会
		//被触发一次,如果是在被拖拽的话,则不会被触发
		printf("LV_EVENT_LONG_PRESSED_REPEAT\r\n");
	}
	else if (event == LV_EVENT_CLICKED)
	{
		//只要松手了就会被触发,但是如果触发了 LV_EVENT_PRESS_LOST
		//事件的话,那么此事件将不会被触发
		printf("LV_EVENT_CLICKED\r\n");
	}
	else if (event == LV_EVENT_RELEASED)
	{
		//和 LV_EVENT_CLICKED 事件一样,没啥区别,位于 LV_EVENT_CLICKED 事
		//件之后触发
		printf("LV_EVENT_RELEASED\r\n");
	}
	else if (event == LV_EVENT_DRAG_BEGIN)
	{
		//拖拽开始时触发
		printf("LV_EVENT_DRAG_BEGIN\r\n");
	}
	else if (event == LV_EVENT_DRAG_END)
	{
		//拖拽结束时触发
		printf("LV_EVENT_DRAG_END\r\n");
	}
	else if (event == LV_EVENT_DRAG_THROW_BEGIN)
	{
		//拖拽漂移开始时触发
		printf("LV_EVENT_DRAG_THROW_BEGIN\r\n");
	}
	else if (event == LV_EVENT_REFRESH)
	{
		//留给用户手动发送触发此事件
		uint32_t* data = (uint32_t*)lv_event_get_data();
		printf("LV_EVENT_REFRESH data %x\r\n",*data);
	}
	else if (event == LV_EVENT_DELETE)
	{
		//对象被删除时触发
		printf("LV_EVENT_DELETE\r\n");
	}
	else if (event == USER_EVENT_1)
	{
		//用户自定义事件 1
		//获取用户自定义数据
		uint32_t* data = (uint32_t*)lv_event_get_data();
		printf("USER_EVENT_1 data:%x\r\n",*data);
	}
}
uint32_t test_data=0x5a;
uint32_t test_data1 = 0x5b;
void lv_events_test()
{
	lv_obj_t* scr = lv_scr_act();//获取当前活跃的屏幕对象
	//创建一个默认按钮,用来测试事件
	lv_obj_t *btn1 = lv_btn_create(scr, NULL);
	lv_obj_set_pos(btn1, 20, 20);//设置坐标
	lv_obj_set_size(btn1, 150, 50);//设置大小
	lv_obj_set_event_cb(btn1, btn_event_cb);//设置回调函数
	lv_obj_t* label = lv_label_create(btn1, NULL);//给 btn1 添加 label 子对象
	lv_label_set_text(label, "Click me");//设置文本
	
    //下面2个函数手动触发事件
	lv_event_send(btn1, USER_EVENT_1, &test_data);//内部调用lv_event_send_func
	lv_event_send_func(btn_event_cb, btn1, LV_EVENT_REFRESH, &test_data1);
}

在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值