屏幕
在使用屏幕之前需要对屏幕参数进行设置
- 定义显示缓冲区 static lv_disp_draw_buf_t draw_buf;
- 对显示缓冲区进行初始化lv_disp_draw_buf_init(&draw_buf, buf1, buf2, buf_size);
- 定义显示驱动结构体 static lv_disp_drv_t disp_drv;
- 初始化显示驱动lv_disp_drv_init(&disp_drv);
- 设置显示驱动参数
- 注册显示驱动 lv_disp_drv_register(&disp_drv);
- //example:
- /*LittlevGL init*/
- lv_init();
- /*Linux frame buffer device init*/
- fbdev_init();
- /*A small buffer for LittlevGL to draw the screen's content*/
- static lv_color_t buf[DISP_BUF_SIZE];
- /*Initialize a descriptor for the buffer*/
- static lv_disp_draw_buf_t disp_buf;
- lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);
- /*Initialize and register a display driver*/
- static lv_disp_drv_t disp_drv;
- lv_disp_drv_init(&disp_drv);
- disp_drv.draw_buf = &disp_buf;
- disp_drv.flush_cb = fbdev_flush;
- disp_drv.hor_res = 1024;
- disp_drv.ver_res = 600;
- lv_disp_drv_register(&disp_drv);
复制代码 lv_disp_draw_buf_init函数
此函数用于对显示缓冲区进行初始化- void lv_disp_draw_buf_init(lv_disp_draw_buf_t * draw_buf, lv_color_t * buf1, lv_color_t * buf2, uint32_t buf_size);
- //draw_buf:指向要初始化的 lv_disp_draw_buf_t 结构体的指针。这个结构体用于存储显示缓冲区的相关信息。
- //buf1:指向第一个缓冲区的指针
- //buf2:指向第二个缓冲区的指针
- //buf_size:缓冲区的大小,单位是像素
复制代码 lv_disp_drv_init函数
此函数用于初始化显示驱动结构体- void lv_disp_drv_init(lv_disp_drv_t * drv);
- //drv:指向要初始化的 lv_disp_drv_t 结构体的指针
复制代码 lv_disp_drv_register函数
用于将初始化好的显示驱动结构体 lv_disp_drv_t 注册到 LVGL 系统中。注册后,LVGL 将使用这个驱动来与硬件显示设备进行交互。- lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * drv);
- //drv:指向初始化好的 lv_disp_drv_t 结构体的指针
- //ret:返回一个指向新注册的显示设备的 lv_disp_t 指针
复制代码 lv_obj_create函数
此函数主要用于创建一个屏幕- lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy);
- //parent:指向父对象的指针。如果设置为 NULL,则新创建的对象将成为屏幕的子对象
- //copy:指向要复制的对象的指针。如果设置为 NULL,则创建一个新的对象;如果设置为一个已存在的对象,则新创建的对象将是该对象的副本。
- ret:一个指向新创建的对象的指针
复制代码 lv_scr_load函数
此函数用于加载一个新的屏幕- void lv_scr_load(lv_obj_t * scr);
- //scr:指向要加载的屏幕对象的指针。这个屏幕对象必须已经创建并准备好显示内容。
复制代码 lv_scr_act函数
此函数用于获取当前活动的屏幕对象- lv_obj_t * lv_scr_act(lv_disp_t * disp);
- //disp:指向显示设备的指针。如果设置为 NULL,则使用默认的显示设备。
- //ret;返回一个指向当前活动屏幕的指针
复制代码- //example
- #include "lvgl.h"
- // 假设已经注册了两个显示设备 disp1 和 disp2
- lv_disp_t * disp1;
- lv_disp_t * disp2;
- void example_add_label_to_specific_screen(void) {
- // 获取第一个屏幕的当前活动屏幕
- lv_obj_t * scr1 = lv_scr_act(disp1);
- // 在第一个屏幕上添加一个标签
- lv_obj_t * label1 = lv_label_create(scr1);
- lv_label_set_text(label1, "Hello, Screen 1!");
- lv_obj_align(label1, LV_ALIGN_CENTER, 0, 0);
- // 获取第二个屏幕的当前活动屏幕
- lv_obj_t * scr2 = lv_scr_act(disp2);
- // 在第二个屏幕上添加一个标签
- lv_obj_t * label2 = lv_label_create(scr2);
- lv_label_set_text(label2, "Hello, Screen 2!");
- lv_obj_align(label2, LV_ALIGN_CENTER, 0, 0);
- }
复制代码 lv_layer_top宏
用于访问当前屏幕的顶层图层,顶层图层是一个特殊的图层,通常用于显示临时内容,如弹出窗口、对话框、提示信息等。这些内容通常需要覆盖在其他对象之上,而不会影响屏幕上的其他内容。- #define lv_layer_top(disp) ((disp)->layer_top)
- //disp:指向显示设备的指针。如果省略参数,通常会使用默认的显示设备。
复制代码 lv_layer_sys函数
用于在所有屏幕的最上层显示内容。它位于 layer_top 的上方,确保其内容始终可见- lv_obj_t * sys_layer = lv_layer_sys(); // 获取系统层
- lv_obj_t * label = lv_label_create(sys_layer); // 在系统层上创建标签
- lv_label_set_text(label, "System Layer Label"); // 设置标签文本
- lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); // 将标签居中对齐
复制代码 lv_scr_load_anim函数
用于加载新屏幕并应用动画效果的函数- void lv_scr_load_anim(lv_obj_t * scr, lv_scr_load_anim_t anim_type, uint32_t time, uint32_t delay, bool auto_del);
- //scr:指向要加载的新屏幕的指针
- //anim_type:动画类型,定义在 lv_scr_load_anim_t 枚举中
- /* ***********************************************************
- LV_SCR_LOAD_ANIM_NONE:无动画,立即切换。
- LV_SCR_LOAD_ANIM_MOVE_LEFT:新屏幕从右侧滑入,旧屏幕向左滑出。
- LV_SCR_LOAD_ANIM_MOVE_RIGHT:新屏幕从左侧滑入,旧屏幕向右滑出。
- LV_SCR_LOAD_ANIM_MOVE_TOP:新屏幕从底部滑入,旧屏幕向上滑出。
- LV_SCR_LOAD_ANIM_MOVE_BOTTOM:新屏幕从顶部滑入,旧屏幕向下滑出。
- LV_SCR_LOAD_ANIM_FADE_ON:新屏幕淡入,旧屏幕淡出。
- ************************************************************** */
- //time:动画持续时间,单位是毫秒(ms)
- //delay:动画开始前的延迟时间
- //auto_del:布尔值,如果设置为 true,动画完成后会自动删除旧屏幕及其子对象
复制代码 lv_disp_set_default函数
函数用于设置默认的显示设备,默认显示设备是 LVGL 在没有明确指定显示设备时,会自动使用的显示设备- void lv_disp_set_default(lv_disp_t * disp);
- //disp:指向要设置为默认的显示设备的指针
复制代码 lv_obj_add_state函数
此函数用于为对象添加状态- void lv_obj_add_state(lv_obj_t * obj, lv_state_t state);
- //obj:指向要操作的对象的指针
- //state:要添加的状态,类型为 lv_state_t 枚举
- //LV_STATE_DEFAULT:默认状态。
- //LV_STATE_FOCUSED:对象获得焦点时的状态。
- //LV_STATE_PRESSED:对象被按下时的状态。
- //LV_STATE_CHECKED:对象被选中时的状态(例如复选框)。
- //LV_STATE_DISABLED:对象被禁用时的状态。
- //LV_STATE_HOVERED:鼠标悬停在对象上时的状态。
- //LV_STATE_FOCUSED_KEY:通过键盘获得焦点时的状态。
- //LV_STATE_FOCUSED_PRESSED:获得焦点且被按下时的状态。
- //LV_STATE_PRESSED_HOVERED:被按下且鼠标悬停时的状态。
- //LV_STATE_FOCUSED_HOVERED:获得焦点且鼠标悬停时的状态。
复制代码- #include "lvgl.h"
- void example_add_state_to_button(void) {
- // 创建一个按钮
- lv_obj_t * btn = lv_btn_create(lv_scr_act());
- // 创建一个样式
- static lv_style_t style_btn;
- lv_style_init(&style_btn);
- // 设置默认状态的样式
- lv_style_set_bg_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0xCCCCCC));
- lv_style_set_text_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0x000000));
- // 设置按下状态的样式
- lv_style_set_bg_color(&style_btn, LV_STATE_PRESSED, lv_color_hex(0xAAAAAA));
- lv_style_set_text_color(&style_btn, LV_STATE_PRESSED, lv_color_hex(0xFFFFFF));
- // 将样式应用到按钮
- lv_obj_add_style(btn, LV_BTN_PART_MAIN, &style_btn);
- // 添加状态:按下状态
- lv_obj_add_state(btn, LV_STATE_PRESSED);
- }
复制代码 lv_obj_clear_state函数
此函数清除对象(如按钮、标签等)的某个或某些状态- void lv_obj_clear_state(lv_obj_t * obj, lv_state_t state);
- //obj:指向要操作的对象的指针
- //state:要清除的状态
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |