LVGL学习之样式和时间,基于正点原子

添加普通样式

cpp 复制代码
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); 					/* 设置部件的样式 */

添加本地样式

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

普通样式定义静态全局,或者是动态分配可用,本地样式只能在定义的局部使用

cpp 复制代码
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,		 /* 禁用状态 */
    ...
};

这个用于设置样式是最后一项的选择。

LVGL的样式设置

样式 设置在lvgl官网,选择v8.2的版本,overview,选择Style properties,我们可以看到有这样一些特性,点border进去(边界)

设置的格式是 lv_obj_set_style_(前缀)+后缀,下图加粗字体

示例:lv_obj_set_style_border_color(obj1, lv_color_hex(0x56c94c), LV_STATE_DEFAULT); //设置主体边界颜色

另外,每个widgets有不同的组成部分,比如滑块就有指示器,手柄和主体三部分组成,设置的话可以通过

lv_obj_set_style_bg_color(slider1, lv_color_hex(0x56c94c), LV_STATE_DEFAULT| LV_PART_KNOB);

其中 LV_PART_KNOB = 0x030000, /* 手柄或旋钮,用于调整参数值 */,一次 只能或同中类型一个,多的话会被覆盖

cpp 复制代码
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, 	 	/* 光标 */
};

tips:

某些默认样式可能会覆盖你的设置。例如,slider 的部分组件可能预设了特定的 border 或 outline,导致你的设置不起作用。

解决方案:

确保在设置样式时清除或覆盖默认样式:

lv_obj_remove_style_all(slider); // 移除所有默认样式

lv_obj_add_style(slider, &style, LV_PART_MAIN); // 添加新样式

事件

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

code:

cpp 复制代码
#include "my_gui.h"
#include <stdio.h>

lv_obj_t* obj1;
lv_obj_t* switch1;
static void my_event_cb(lv_event_t* e)
{
     lv_event_code_t code=lv_event_get_code(e);   //获取不同事件类型
     if (code == LV_EVENT_CLICKED)  //同一部件不同事件类型
     {
         printf("Event Type: Pree and release\r\n");
     }else if(code == LV_EVENT_LONG_PRESSED)
     {
         printf("Event Type:Long Press\r\n");
     }
}

static void event_cb(lv_event_t* e)
{
    lv_obj_t* target = lv_event_get_target(e); 		 /* 第一步:获取触发事件的部件 */
    if (target == obj1)				 /* 第二步:判断触发事件的部件 */
    {
        printf("parent triggle \r\n");	 		 /* 第三步:执行相应操作 */
    }
    else if (target == switch1)
    {
        printf("child triggle \r\n");
    }
}


void my_gui_demo(void)
{

    obj1 = lv_obj_create(lv_scr_act());
    lv_obj_set_size(obj1, 480, 320);

    switch1 = lv_switch_create(obj1);
    lv_obj_set_size(switch1, 50, 20);
    lv_obj_set_align(switch1, LV_ALIGN_CENTER);
    //事件
    lv_obj_add_event_cb(obj1,my_event_cb, LV_EVENT_CLICKED, NULL);   //obj1控件,回调函数cb,按键按下就触发,传入数据空
    lv_obj_add_event_cb(obj1, my_event_cb, LV_EVENT_LONG_PRESSED, NULL);   //obj1控件,回调函数cb,按键按下就触发,传入数据空

    lv_obj_add_event_cb(obj1, event_cb, LV_EVENT_CLICKED, NULL);   //obj1控件,回调函数cb,按键按下就触发,传入数据空
    lv_obj_add_event_cb(switch1, event_cb, LV_EVENT_CLICKED, NULL);   //obj1控件,回调函数cb,按键按下就触发,传入数据空

    
}
相关推荐
橙光成长2 小时前
PDF离线工具箱深度解析:4MB纯前端单文件,40+功能全本地运行,文件绝不上传
前端·pdf·1024程序员节
小poop8 小时前
CSS 基础与实战:从入门到精通网页美化
前端
宝绿特塑业再生科技8 小时前
改性HDPE再生颗粒在户外家具挤出发泡板材中的色差控制与高品质价值重构
经验分享·科技·学习·生活·1024程序员节·户外家具
Csvn10 小时前
运行时性能
前端
Never_every9910 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck11 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
andrsted11 小时前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节
空中湖11 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
Alsn8612 小时前
Windows 安装 Ollama 及本地模型部署
学习·1024程序员节
欣欣之王来了13 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程