当前位置: 首页 > article >正文

LVGL——基础对象篇

LVGL——基础对象篇

  • 基础对象篇
    • 部件大小
    • 位置设置
      • 部件位置(position)设置相关API函数:
    • 对齐
      • 对齐方式
  • 样式
    • 给部件添加样式
      • 添加普通样式
      • 添加本地样式
      • 样式触发时机设置
      • 单独设置部件中某个部分的样式
  • 事件
    • 事件(events)相关API函数:
      • 不同事件类型共用一个回调
      • 不同的部件共用一个事件回调函数

基础对象篇

部件大小

  • 设置宽度:lv_obj_set_width(obj, new_width);
  • 设置高度:lv_obj_set_height(obj, new_height);
  • 同时设置宽度、高度:lv_obj_set_size(obj, new_width, new_height);

位置设置

LVGL以左上角为原点
在这里插入图片描述

部件位置(position)设置相关API函数:

  • 设置X轴坐标:lv_obj_set_x(obj, new_x);
  • 设置Y轴坐标:lv_obj_set_y(obj, new_y);
  • lv_obj_set_pos(obj, new_x, new_y);

对齐

  • 参照父对象对齐:lv_obj_set_align(obj, LV_ALIGN_…)
  • 参照父对象对齐,再进行偏移:lv_obj_align(obj, LV_ALIGN_…, x, y),
  • LV_ALIGN_为统一前缀,格式统一为LV_ALIGN_+对齐方式
  • 参照其他对象对齐(无父子关系),再进行偏移:lv_obj_align_to(obj_to_align, obj_referece, LV_ALIGN_…, x, y);
    注意有父子关系的部件使用对齐方式的时候要注意不然可能会导致部件显示缺失

对齐方式

在这里插入图片描述

样式

样式用于设置部件的外观,以优化显示界面和实现用户交互

给部件添加样式

添加普通样式

static lv_style_t style; 									/* 定义样式变量 */
lv_style_init(&style); 										/* 初始化样式 */
lv_style_set_bg_color(&style, lv_color_hex(0xf4b183)); 		/* 设置背景颜色 */

lv_obj_t * obj = lv_obj_create(lv_scr_act()); 				/* 创建一个部件 */
lv_obj_add_style(obj,&style,LV_STATE_DEFAULT);				/* 设置部件样式 */

添加本地样式

lv_obj_t * obj = lv_obj_create(lv_scr_act()); 						/* 创建一个部件 */
lv_obj_set_style_bg_color(obj,lv_color_hex(0xf4b183),LV_STATE_DEFAULT);	/* 设置部件的样式 */

样式触发时机设置

enum {

    LV_STATE_DEFAULT     	=  0x0000,		 /* 默认状态 */
    LV_STATE_CHECKED     	=  0x0001,		 /* 切换或选中状态 */
    LV_STATE_FOCUSED     	=  0x0002,		 /* 通过键盘、编码器聚焦或通过触摸板、鼠标单击 */
    LV_STATE_FOCUS_KEY   	=  0x0004,		 /* 通过键盘、编码器聚焦 */
    LV_STATE_EDITED      	=  0x0008,		 /* 由编码器编辑 */
    LV_STATE_HOVERED     	=  0x0010,		 /* 鼠标悬停(现在不支持)*/
    LV_STATE_PRESSED     	=  0x0020,		 /* 已按下 */
    LV_STATE_SCROLLED    	=  0x0040,		 /* 滚动状态 */
    LV_STATE_DISABLED    	=  0x0080,		 /* 禁用状态 */};

单独设置部件中某个部分的样式

在这里插入图片描述

例如一下就是单独设置指示器的函数

lv_obj_set_style_bg_color(obj,lv_color_hex(0xf4b183),LV_STATE_DEFAULT|LV_PART_INDICATOR);	/* 设置部件的样式 */
enum {

    LV_PART_MAIN		= 0x000000, 	 	/* 主体,像矩形一样的背景 */
    LV_PART_SCROLLBAR	= 0x010000, 	 	/* 滚动条 */
    LV_PART_INDICATOR	= 0x020000, 	 	/* 指示器,指示当前值 */
    LV_PART_KNOB		= 0x030000,	 		/* 手柄或旋钮,用于调整参数值 */
    LV_PART_SELECTED	= 0x040000, 	 	/* 选项框,指示当前选择的选项 */
    LV_PART_ITEMS		= 0x050000, 	 	/* 相似的元素,例如单元格 */
    LV_PART_TICKS		= 0x060000, 	 	/* 刻度 */
    LV_PART_CURSOR		= 0x070000, 	 	/* 光标 */
};

事件

LVGL中,当发生用户感兴趣的事情时,可以触发回调事件,以执行相关的操作

事件(events)相关API函数:

在这里插入图片描述

不同事件类型共用一个回调

static void event_cb( lv_event_t *e )
{
	lv_event_code_t   code = lv_event_get_code(e);		 /* 第一步:获取事件类型 */
	if ( code == LV_EVENT_CLICKED )				 /* 第二步:判断事件类型 */
	{
        		printf(“事件类型: 按下后释放\r\n”);	 		 /* 第三步:执行相应操作 */
	}
	else if ( code == LV_EVENT_LONG_PRESSED)
	{
        		printf(“事件类型:按下(长按)\r\n”);	
	}
}

不同的部件共用一个事件回调函数

static void event_cb( lv_event_t *e )
{
	lv_obj_t   *target = lv_event_get_target(e); 		 /* 第一步:获取触发事件的部件 */
	if ( target == parent_obj )				 /* 第二步:判断触发事件的部件 */
	{
        		printf(“父对象触发事件 \r\n”);	 		 /* 第三步:执行相应操作 */
	}
	else if ( target == child_obj )
	{
        		printf(“子对象触发事件 \r\n”);	
	}
}

http://www.kler.cn/a/457752.html

相关文章:

  • 《Java 数据结构》
  • vscode代码AI插件Continue 安装与使用
  • 4.Web安全——JavaScript基础
  • parquet文件数据格式介绍以及python pandas对parquet常见操作
  • sqlalchemy-access库操作MS Access
  • 【数据库系列】Spring Boot 中整合 MyBatis-Plus详细步骤
  • SpringCloudAlibaba实战入门之路由网关Gateway初体验(十一)
  • YOLOv8模型改进 第二十五讲 添加基于卷积调制(Convolution based Attention) 替换自注意力机制
  • 【SQL】期末复习SQL语法详细总结
  • 第二十七周学习周报
  • RxSqlUtils(base R2dbc)
  • 【本地Docker部署PDFMathTranslate文档翻译服务并实现远程使用教程】
  • 机器学习DAY7: 特征工程和特征选择(数据预处理)(完)
  • 磁环的选型【EMC】
  • 【Python】邮箱登录验证码功能实现
  • 虚拟机网络配置
  • 基于SpringBoot的校园周边美食探索及分享平台的设计与实现
  • ArcGIS中怎么进行水文分析?(思路介绍)
  • Three.js 字体
  • 关于JAVA方法值传递问题
  • 基于Python的智能停车场管理系统
  • 深入解析 Python 函数的返回值
  • 嵌入式系统 第十三讲 网络设备驱动程序开发
  • 自动驾驶3D目标检测综述(六)
  • Qt仿音乐播放器:绘画、图片
  • 43243242342