这段代码展示了如何创建一个通用函数来控制N个控件的显示和隐藏,并提供了一个简单的示例用法。
#include "lvgl.h"
// 这个函数用于控制N个控件的显示和隐藏,并检查控件是否为空指针
void control_widgets_visibility(lv_obj_t **widgets, uint8_t num_widgets, bool hide) {
if (widgets == NULL) {
return; // 如果控件数组为空,直接返回
}
for (uint8_t i = 0; i < num_widgets; ++i) {
if (widgets[i] != NULL) { // 检查当前控件是否为空指针
if (hide) {
lv_obj_add_flag(widgets[i], LV_OBJ_FLAG_HIDDEN);
} else {
lv_obj_clear_flag(widgets[i], LV_OBJ_FLAG_HIDDEN);
}
}
}
}
// 示例代码:如何使用上述函数
int main(void) {
// 初始化LVGL
lv_init();
// 初始化硬件(例如,LVGL驱动程序等)
// 假设你有8个控件
uint8_t num_widgets = 8;
lv_obj_t *widgets[num_widgets];
// 创建8个控件并初始化为标签
for (uint8_t i = 0; i < num_widgets; ++i) {
widgets[i] = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(widgets[i], "Label %d", i + 1);
}
// 隐藏所有控件
control_widgets_visibility(widgets, num_widgets, true);
// 显示所有控件
control_widgets_visibility(widgets, num_widgets, false);
// 在主循环中处理LVGL
while (1) {
lv_task_handler(); // LVGL任务处理
// 你自己的其他代码
}
return 0;
}
以下是一个示例项目,包括一个头文件和一个C文件,包含了30个基于LVGL 8.3.10版本的常用应用层函数,并且提供了完整的中文注释。
#头文件 : lvgl_apps.h
#ifndef LVGL_APPS_H
#define LVGL_APPS_H
#include "lvgl.h"
// 显示控件集合中的所有控件
void
show_widgets(lv_obj_t *widgets[], int num);
// 隐藏控件集合中的所有控件
void hide_widgets(lv_obj_t *widgets[], int num);
// 切换控件的可见性
void toggle_widget(lv_obj_t *widget);
// 设置控件的文本
void set_widget_text(lv_obj_t *widget, const char *text);
// 设置控件的大小
void set_widget_size(lv_obj_t *widget, lv_coord_t width, lv_coord_t height);
// 设置控件的位置
void set_widget_pos(lv_obj_t *widget, lv_coord_t x, lv_coord_t y);
// 注册控件的点击事件回调
void register_click_event(lv_obj_t *widget, lv_event_cb_t cb);
// 更新控件的样式
void update_widget_style(lv_obj_t *widget, lv_style_t *style);
// 创建一个新的按钮
lv_obj_t *create_button(lv_obj_t *parent, lv_event_cb_t cb);
// 创建一个新的标签
lv_obj_t *create_label(lv_obj_t *parent, const char *text);
// 创建新的文本框
lv_obj_t *create_textarea(lv_obj_t *parent);
// 更新标签的文本
void update_label_text(lv_obj_t *label, const char *text);
// 设置控件的透明度
void set_widget_opacity(lv_obj_t *widget, lv_opa_t opa);
// 设置控件的背景颜色
void set_widget_bg_color(lv_obj_t *widget, lv_color_t color);
// 显示消息框
lv_obj_t *show_msgbox(lv_obj_t *parent, const char *title, const char *text, const char **btns);
// 创建新的进度条
lv_obj_t *create_progress_bar(lv_obj_t *parent, int32_t range);
// 更新进度条的值
void update_progress_bar(lv_obj_t *bar, int32_t value);
// 创建新的滑动条
lv_obj_t *create_slider(lv_obj_t *parent, int32_t range);
// 更新滑动条的值
void update_slider_value(lv_obj_t *slider, int32_t value);
// 创建新的图像控件
lv_obj_t *create_image(lv_obj_t *parent, const void *src);
// 加载新图像到图像控件
void load_image(lv_obj_t *img, const void *src);
// 设置控件的边框颜色
void set_widget_border_color(lv_obj_t *widget, lv_color_t color);
// 设置控件的边框宽度
void set_widget_border_width(lv_obj_t *widget, lv_coord_t width);
// 设置控件的圆角
void set_widget_radius(lv_obj_t *widget, lv_coord_t radius);
// 更新文本框的文本
void update_textarea_text(lv_obj_t *textarea, const char *text);
// 创建下拉列表
lv_obj_t *create_dropdown(lv_obj_t *parent, const char *options);
// 更新下拉列表的选项
void update_dropdown_options(lv_obj_t *dropdown, const char *options);
// 创建开关控件
lv_obj_t *create_switch(lv_obj_t *parent);
// 切换开关控件的状态
void toggle_switch(lv_obj_t *sw, bool state);
// 创建新的滚动视图
lv_obj_t *create_scroll_view(lv_obj_t *parent);
// 创建新的表格
lv_obj_t *create_table(lv_obj_t *parent, int row_cnt, int col_cnt);
// 设置控件的边框透明度
void set_widget_border_opa(lv_obj_t *widget, lv_opa_t opa);
// 设置控件的边框类型
void set_widget_border_side(lv_obj_t *widget, lv_border_side_t side);
// 设置控件的背景透明度
void set_widget_bg_opa(lv_obj_t *widget, lv_opa_t opa);
// 设置控件的对齐方式
void set_widget_align(lv_obj_t *widget, lv_align_t align);
// 创建新的图表
lv_obj_t *create_chart(lv_obj_t *parent);
// 更新图表数据
void update_chart_data(lv_obj_t *chart, lv_chart_series_t *series, const lv_coord_t *data, uint16_t point_cnt);
// 创建新的进度环
lv_obj_t *create_arc(lv_obj_t *parent, int32_t min, int32_t max);
// 设置进度环的值
void set_arc_value(lv_obj_t *arc, int32_t value);
// 创建新的列表
lv_obj_t *create_list(lv_obj_t *parent);
// 向列表添加按钮
lv_obj_t *add_list_btn(lv_obj_t *list, const char *text, lv_event_cb_t cb);
// 创建新的滚动条
lv_obj_t *create_scroll_bar(lv_obj_t *parent);
// 设置滚动条的范围
void set_scroll_bar_range(lv_obj_t *scroll_bar, lv_coord_t min, lv_coord_t max);
// 创建新的折叠面板
lv_obj_t *create_accordion(lv_obj_t *parent, const char *title);
// 展开折叠面板
void expand_accordion(lv_obj_t *accordion);
// 收起折叠面板
void collapse_accordion(lv_obj_t *accordion);
// 创建LED控件
lv_obj_t *create_led(lv_obj_t *parent);
// 打开LED
void led_on(lv_obj_t *led);
// 关闭LED
void led_off(lv_obj_t *led);
// 设置LED的亮度
void set_led_brightness(lv_obj_t *led, uint8_t brightness);
// 创建滚动文本
lv_obj_t *create_roller(lv_obj_t *parent, const char *options);
// 更新滚动文本的选项
void update_roller_options(lv_obj_t *roller, const char *options);
// 创建进度条
lv_obj_t *create_bar(lv_obj_t *parent, int32_t min, int32_t max);
// 设置进度条的值
void set_bar_value(lv_obj_t *bar, int32_t value);
// 创建贴图
lv_obj_t *create_canvas(lv_obj_t *parent);
// 设置贴图的尺寸
void set_canvas_size(lv_obj_t *canvas, lv_coord_t width, lv_coord_t height);
// 创建键盘
lv_obj_t *create_keyboard(lv_obj_t *parent);
// 设置键盘目标
void set_keyboard_target(lv_obj_t *keyboard, lv_obj_t *target);
// 创建新的滚动标签
lv_obj_t *create_scrollable_label(lv_obj_t *parent);
// 设置滚动标签的文本
void set_scrollable_label_text(lv_obj_t *scrollable_label, const char *text);
// 创建新的切换按钮
lv_obj_t *create_toggle_btn(lv_obj_t *parent);
// 获取切换按钮的状态
bool get_toggle_btn_state(lv_obj_t *toggle_btn);
// 设置切换按钮的状态
void set_toggle_btn_state(lv_obj_t *toggle_btn, bool state);
// 创建新的页控件
lv_obj_t *create_page(lv_obj_t *parent);
// 设置页控件的滚动方向
void set_page_scroll_dir(lv_obj_t *page, lv_dir_t dir);
// 创建新的弹出菜单
lv_obj_t *create_popup_menu(lv_obj_t *parent, const char *title, const char **options);
// 设置弹出菜单的选项
void set_popup_menu_options(lv_obj_t *popup_menu, const char **options);
// 创建新的进度条动画
lv_anim_t *create_progress_bar_anim(lv_obj_t *progress_bar, int32_t start, int32_t end, uint32_t time, lv_anim_path_t *path);
// 设置进度条动画的路径
void set_progress_bar_anim_path(lv_anim_t *anim, lv_anim_path_t *path);
// 创建新的音量控制器
lv_obj_t *create_volume_ctrl(lv_obj_t *parent);
// 设置音量控制器的音量
void set_volume_ctrl_volume(lv_obj_t *volume_ctrl, int32_t volume);
// 创建新的数据表格
lv_obj_t *create_data_table(lv_obj_t *parent, int row_cnt, int col_cnt);
// 设置数据表格的单元格文本
void set_data_table_cell_text(lv_obj_t *table, int row, int col, const char *text);
// 创建新的色轮控件
lv_obj_t *create_color_wheel(lv_obj_t *parent, bool wheel);
// 获取色轮控件的颜色
lv_color_t get_color_wheel_color(lv_obj_t *color_wheel);
// 创建新的导航栏
lv_obj_t *create_nav_bar(lv_obj_t *parent);
// 向导航栏添加按钮
lv_obj_t *add_nav_bar_btn(lv_obj_t *nav_bar, const char *label, lv_event_cb_t cb);
// 创建新的日历控件
lv_obj_t *create_calendar(lv_obj_t *parent);
// 设置日历控件的日期
void set_calendar_date(lv_obj_t *calendar, int year, int month, int day);
// 创建新的时间选择器
lv_obj_t *create_time_picker(lv_obj_t *parent);
// 获取时间选择器的时间
void get_time_picker_time(lv_obj_t *time_picker, int *hour, int *minute);
// 创建新的标签页控件
lv_obj_t *create_tabview(lv_obj_t *parent);
// 向标签页控件添加标签页
lv_obj_t *add_tabview_tab(lv_obj_t *tabview, const char *title);
// 创建新的信息提示框
lv_obj_t *create_info_popup(lv_obj_t *parent, const char *message);
// 显示信息提示框
void show_info_popup(lv_obj_t *popup);
// 隐藏信息提示框
void hide_info_popup(lv_obj_t *popup);
// 创建新的二维码控件
lv_obj_t *create_qr_code(lv_obj_t *parent, const char *text);
// 更新二维码控件的内容
void update_qr_code(lv_obj_t *qr_code, const char *text);
// 创建新的消息箱
lv_obj_t *create_message_box(lv_obj_t *parent, const char *title, const char *message);
// 显示消息箱
void show_message_box(lv_obj_t *msgbox);
// 隐藏消息箱
void hide_message_box(lv_obj_t *msgbox);
// 创建新的滑动开关
lv_obj_t *create_switch(lv_obj_t *parent);
// 设置滑动开关的状态
void set_switch_state(lv_obj_t *sw, bool state);
// 获取滑动开关的状态
bool get_switch_state(lv_obj_t *sw);
// 创建新的滑块
lv_obj_t *create_slider(lv_obj_t *parent, int32_t min, int32_t max);
// 设置滑块的值
void set_slider_value(lv_obj_t *slider, int32_t value);
// 获取滑块的值
int32_t get_slider_value(lv_obj_t *slider);
// 创建新的波动条(水平进度条)
lv_obj_t *create_wave_bar(lv_obj_t *parent);
// 设置波动条的值
void set_wave_bar_value(lv_obj_t *wave_bar, int32_t value);
// 创建新的图像控件
lv_obj_t *create_image(lv_obj_t *parent, const void *image_src);
// 设置图像控件的源图片
void set_image_src(lv_obj_t *image, const void *image_src);
// 创建新的复选框
lv_obj_t *create_checkbox(lv_obj_t *parent, const char *text);
// 设置复选框的状态
void set_checkbox_state(lv_obj_t *checkbox, bool state);
// 获取复选框的状态
bool get_checkbox_state(lv_obj_t *checkbox);
// 创建新的文本输入框
lv_obj_t *create_textarea(lv_obj_t *parent);
// 设置文本输入框的占位符
void set_textarea_placeholder(lv_obj_t *textarea, const char *placeholder);
// 创建新的数值选择控件
lv_obj_t *create_spinbox(lv_obj_t *parent, int32_t min, int32_t max);
// 设置数值选择控件的值
void set_spinbox_value(lv_obj_t *spinbox, int32_t value);
// 获取数值选择控件的值
int32_t get_spinbox_value(lv_obj_t *spinbox);
// 创建新的圆形按钮
lv_obj_t *create_round_btn(lv_obj_t *parent, const char *text);
// 设置圆形按钮的文本
void set_round_btn_text(lv_obj_t *btn, const char *text);
// 创建新的滚动选择器
lv_obj_t *create_picker(lv_obj_t *parent, const char *options);
// 设置滚动选择器的选项
void set_picker_options(lv_obj_t *picker, const char *options);
// 创建新的卡片视图控件
lv_obj_t *create_card_view(lv_obj_t *parent);
// 向卡片视图控件添加卡片
lv_obj_t *add_card(lv_obj_t *card_view, const char *title, const char *text);
// 创建新的提示信息控件
lv_obj_t *create_tooltip(lv_obj_t *parent, const char *text);
// 设置提示信息控件的文本
void set_tooltip_text(lv_obj_t *tooltip, const char *text);
// 创建新的列表控件
lv_obj_t *create_list(lv_obj_t *parent);
// 向列表控件添加项
lv_obj_t *add_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb);
// 创建新的页签视图
lv_obj_t *create_tabview(lv_obj_t *parent);
// 向页签视图添加页签
lv_obj_t *add_tab(lv_obj_t *tabview, const char *title);
// 创建新的日历控件
lv_obj_t *create_calendar(lv_obj_t *parent);
// 设置日历控件的日期
void set_calendar_date(lv_obj_t *calendar, uint16_t year, uint8_t month, uint8_t day);
// 创建新的动画控件
lv_obj_t *create_anim_obj(lv_obj_t *parent);
// 设置动画控件的属性
void set_anim_properties(lv_obj_t *anim_obj, lv_coord_t start_x, lv_coord_t start_y, lv_coord_t end_x, lv_coord_t end_y, uint32_t duration);
// 创建新的键盘控件
lv_obj_t *create_keyboard(lv_obj_t *parent);
// 设置键盘控件的模式
void set_keyboard_mode(lv_obj_t *keyboard, lv_keyboard_mode_t mode);
// 创建新的页码指示器控件
lv_obj_t *create_page_indicator(lv_obj_t *parent);
// 设置页码指示器控件的页码
void set_page_indicator_page(lv_obj_t *page_indicator, uint16_t page);
// 创建新的指针控件
lv_obj_t *create_pointer_lmeter(lv_obj_t *parent);
// 设置指针控件的值
void set_pointer_value(lv_obj_t *pointer, int16_t value);
// 创建新的加速计控件
lv_obj_t *create_accelerometer_lmeter(lv_obj_t *parent);
// 设置加速计控件的值
void set_accelerometer_value(lv_obj_t *accelerometer, int16_t value);
// 创建新的时钟控件
lv_obj_t *create_clock(lv_obj_t *parent);
// 设置时钟控件的时间
void set_clock_time(lv_obj_t *clock, int8_t hour, int8_t minute, int8_t second);
// 创建新的进度环控件
lv_obj_t *create_progress_ring(lv_obj_t *parent, uint16_t max_value);
// 更新进度环控件的值
void update_progress_ring(lv_obj_t *progress_ring, uint16_t value);
// 创建新的色彩选择器控件
lv_obj_t *create_color_picker(lv_obj_t *parent);
// 获取色彩选择器控件的选定颜色
lv_color_t get_color_picker_color(lv_obj_t *color_picker);
// 创建新的仪表盘控件
lv_obj_t *create_gauge(lv_obj_t *parent, int32_t min, int32_t max);
// 设置仪表盘控件的值
void set_gauge_value(lv_obj_t *gauge, int32_t value);
// 创建新的分隔条控件
lv_obj_t *create_separator(lv_obj_t *parent);
// 设置分隔条控件的方向
void set_separator_direction(lv_obj_t *separator, lv_dir_t dir);
// 创建新的选择开关控件
lv_obj_t *create_select_switch(lv_obj_t *parent, const char *options);
// 设置选择开关控件的选项
void set_select_switch_options(lv_obj_t *select_switch, const char *options);
// 创建新的完成任务控件
lv_obj_t *create_task_done(lv_obj_t *parent);
// 设置完成任务控件的状态
void set_task_done_status(lv_obj_t *task_done, bool done);
#endif // LVGL_APPS_H
## #C 文件 : `lvgl_apps.c`
#include "lvgl_apps.h"
void
show_widgets(lv_obj_t *widgets[], int num)
{
for (int i = 0; i < num; i++)
{
lv_obj_clear_flag(widgets[i], LV_OBJ_FLAG_HIDDEN);
}
}
void hide_widgets(lv_obj_t *widgets[], int num)
{
for (int i = 0; i < num; i++)
{
lv_obj_add_flag(widgets[i], LV_OBJ_FLAG_HIDDEN);
}
}
void toggle_widget(lv_obj_t *widget)
{
if (lv_obj_has_flag(widget, LV_OBJ_FLAG_HIDDEN))
{
lv_obj_clear_flag(widget, LV_OBJ_FLAG_HIDDEN);
}
else
{
lv_obj_add_flag(widget, LV_OBJ_FLAG_HIDDEN);
}
}
void set_widget_text(lv_obj_t *widget, const char *text)
{
if (widget != NULL && text != NULL)
{
lv_label_set_text(widget, text);
}
}
void set_widget_size(lv_obj_t *widget, lv_coord_t width, lv_coord_t height)
{
if (widget != NULL)
{
lv_obj_set_size(widget, width, height);
}
}
void set_widget_pos(lv_obj_t *widget, lv_coord_t x, lv_coord_t y)
{
if (widget != NULL)
{
lv_obj_set_pos(widget, x, y);
}
}
void register_click_event(lv_obj_t *widget, lv_event_cb_t cb)
{
if (widget != NULL)
{
lv_obj_add_event_cb(widget, cb, LV_EVENT_CLICKED, NULL);
}
}
void update_widget_style(lv_obj_t *widget, lv_style_t *style)
{
if (widget != NULL && style != NULL)
{
lv_obj_add_style(widget, style, 0);
}
}
lv_obj_t *create_button(lv_obj_t *parent, lv_event_cb_t cb)
{
lv_obj_t *btn = lv_btn_create(parent);
lv_obj_add_event_cb(btn, cb, LV_EVENT_CLICKED, NULL);
return btn;
}
lv_obj_t *create_label(lv_obj_t *parent, const char *text)
{
lv_obj_t *label = lv_label_create(parent);
lv_label_set_text(label, text);
return label;
}
lv_obj_t *create_textarea(lv_obj_t *parent)
{
lv_obj_t *ta = lv_textarea_create(parent);
return ta;
}
void update_label_text(lv_obj_t *label, const char *text)
{
if (label != NULL && text != NULL)
{
lv_label_set_text(label, text);
}
}
void set_widget_opacity(lv_obj_t *widget, lv_opa_t opa)
{
if (widget != NULL)
{
lv_obj_set_style_opa(widget, opa, 0);
}
}
void set_widget_bg_color(lv_obj_t *widget, lv_color_t color)
{
if (widget != NULL)
{
lv_obj_set_style_bg_color(widget, color, 0);
}
}
lv_obj_t *show_msgbox(lv_obj_t *parent, const char *title, const char *text, const char **btns)
{
lv_obj_t *msgbox = lv_msgbox_create(parent, title, text, btns, true);
lv_obj_center(msgbox);
return msgbox;
}
lv_obj_t *create_progress_bar(lv_obj_t *parent, int32_t range)
{
lv_obj_t *bar = lv_bar_create(parent);
lv_bar_set_range(bar, 0, range);
return bar;
}
void update_progress_bar(lv_obj_t *bar, int32_t value)
{
if (bar != NULL)
{
lv_bar_set_value(bar, value, LV_ANIM_ON);
}
}
lv_obj_t *create_slider(lv_obj_t *parent, int32_t range)
{
lv_obj_t *slider = lv_slider_create(parent);
lv_slider_set_range(slider, 0, range);
return slider;
}
void update_slider_value(lv_obj_t *slider, int32_t value)
{
if (slider != NULL)
{
lv_slider_set_value(slider, value, LV_ANIM_ON);
}
}
lv_obj_t *create_image(lv_obj_t *parent, const void *src)
{
lv_obj_t *img = lv_img_create(parent);
if (img != NULL && src != NULL)
{
lv_img_set_src(img, src);
}
return img;
}
void load_image(lv_obj_t *img, const void *src)
{
if (img != NULL && src != NULL)
{
lv_img_set_src(img, src);
}
}
void set_widget_border_color(lv_obj_t *widget, lv_color_t color)
{
if (widget != NULL)
{
lv_obj_set_style_border_color(widget, color, 0);
}
}
void set_widget_border_width(lv_obj_t *widget, lv_coord_t width)
{
if (widget != NULL)
{
lv_obj_set_style_border_width(widget, width, 0);
}
}
void set_widget_radius(lv_obj_t *widget, lv_coord_t radius)
{
if (widget != NULL)
{
lv_obj_set_style_radius(widget, radius, 0);
}
}
void update_textarea_text(lv_obj_t *textarea, const char *text)
{
if (textarea != NULL && text != NULL)
{
lv_textarea_set_text(textarea, text);
}
}
lv_obj_t *create_dropdown(lv_obj_t *parent, const char *options)
{
lv_obj_t *dropdown = lv_dropdown_create(parent);
lv_dropdown_set_options(dropdown, options);
return dropdown;
}
void update_dropdown_options(lv_obj_t *dropdown, const char *options)
{
if (dropdown != NULL && options != NULL)
{
lv_dropdown_set_options(dropdown, options);
}
}
lv_obj_t *create_switch(lv_obj_t *parent)
{
lv_obj_t *sw = lv_switch_create(parent);
return sw;
}
void toggle_switch(lv_obj_t *sw, bool state)
{
if (sw != NULL)
{
lv_switch_set_state(sw, state);
}
}
lv_obj_t *create_scroll_view(lv_obj_t *parent)
{
lv_obj_t *scroll = lv_obj_create(parent);
lv_obj_set_scrollbar_mode(scroll, LV_SCROLLBAR_MODE_AUTO);
lv_obj_set_style_clip_corner(scroll, true, 0);
lv_obj_set_size(scroll, lv_pct(100), lv_pct(100));
return scroll;
}
lv_obj_t *create_table(lv_obj_t *parent, int row_cnt, int col_cnt)
{
lv_obj_t *table = lv_table_create(parent);
if (table != NULL)
{
lv_table_set_row_cnt(table, row_cnt);
lv_table_set_col_cnt(table, col_cnt);
}
return table;
}
void set_widget_border_opa(lv_obj_t *widget, lv_opa_t opa)
{
if (widget != NULL)
{
lv_obj_set_style_border_opa(widget, opa, 0);
}
}
void set_widget_border_side(lv_obj_t *widget, lv_border_side_t side)
{
if (widget != NULL)
{
lv_obj_set_style_border_side(widget, side, 0);
}
}
void set_widget_bg_opa(lv_obj_t *widget, lv_opa_t opa)
{
if (widget != NULL)
{
lv_obj_set_style_bg_opa(widget, opa, 0);
}
}
void set_widget_align(lv_obj_t *widget, lv_align_t align)
{
if (widget != NULL)
{
lv_obj_align(widget, align, 0, 0);
}
}
lv_obj_t *create_chart(lv_obj_t *parent)
{
lv_obj_t *chart = lv_chart_create(parent);
return chart;
}
void update_chart_data(lv_obj_t *chart, lv_chart_series_t *series, const lv_coord_t *data, uint16_t point_cnt)
{
if (chart != NULL && series != NULL && data != NULL)
{
lv_chart_set_next_value(chart, series, data, point_cnt);
}
}
lv_obj_t *create_arc(lv_obj_t *parent, int32_t min, int32_t max)
{
lv_obj_t *arc = lv_arc_create(parent);
lv_arc_set_range(arc, min, max);
return arc;
}
void set_arc_value(lv_obj_t *arc, int32_t value)
{
if (arc != NULL)
{
lv_arc_set_value(arc, value);
}
}
lv_obj_t *create_list(lv_obj_t *parent)
{
lv_obj_t *list = lv_list_create(parent);
return list;
}
lv_obj_t *add_list_btn(lv_obj_t *list, const char *text, lv_event_cb_t cb)
{
if (list != NULL)
{
lv_obj_t *btn = lv_list_add_btn(list, LV_SYMBOL_FILE, text);
lv_obj_add_event_cb(btn, cb, LV_EVENT_CLICKED, NULL);
return btn;
}
return NULL;
}
lv_obj_t *create_scroll_bar(lv_obj_t *parent)
{
lv_obj_t *scroll_bar = lv_bar_create(parent);
return scroll_bar;
}
void set_scroll_bar_range(lv_obj_t *scroll_bar, lv_coord_t min, lv_coord_t max)
{
if (scroll_bar != NULL)
{
lv_bar_set_range(scroll_bar, min, max);
}
}
lv_obj_t *create_accordion(lv_obj_t *parent, const char *title)
{
lv_obj_t *accordion = lv_obj_create(parent);
lv_obj_set_size(accordion, lv_pct(100), LV_SIZE_CONTENT);
lv_obj_set_layout(accordion, LV_LAYOUT_COLUMN_MID);
lv_obj_t *header = lv_label_create(accordion);
lv_label_set_text(header, title);
return accordion;
}
void expand_accordion(lv_obj_t *accordion)
{
if (accordion != NULL)
{
lv_obj_clear_flag(accordion, LV_OBJ_FLAG_HIDDEN);
}
}
void collapse_accordion(lv_obj_t *accordion)
{
if (accordion != NULL)
{
lv_obj_add_flag(accordion, LV_OBJ_FLAG_HIDDEN);
}
}
lv_obj_t *create_led(lv_obj_t *parent)
{
lv_obj_t *led = lv_led_create(parent);
return led;
}
void led_on(lv_obj_t *led)
{
if (led != NULL)
{
lv_led_on(led);
}
}
void led_off(lv_obj_t *led)
{
if (led != NULL)
{
lv_led_off(led);
}
}
void set_led_brightness(lv_obj_t *led, uint8_t brightness)
{
if (led != NULL)
{
lv_led_set_brightness(led, brightness);
}
}
lv_obj_t *create_roller(lv_obj_t *parent, const char *options)
{
lv_obj_t *roller = lv_roller_create(parent);
if (options != NULL)
{
lv_roller_set_options(roller, options, LV_ROLLER_MODE_INIFINITE);
}
return roller;
}
void update_roller_options(lv_obj_t *roller, const char *options)
{
if (roller != NULL && options != NULL)
{
lv_roller_set_options(roller, options, LV_ROLLER_MODE_INIFINITE);
}
}
lv_obj_t *create_bar(lv_obj_t *parent, int32_t min, int32_t max)
{
lv_obj_t *bar = lv_bar_create(parent);
lv_bar_set_range(bar, min, max);
return bar;
}
void set_bar_value(lv_obj_t *bar, int32_t value)
{
if (bar != NULL)
{
lv_bar_set_value(bar, value, LV_ANIM_ON);
}
}
lv_obj_t *create_canvas(lv_obj_t *parent)
{
lv_obj_t *canvas = lv_canvas_create(parent);
return canvas;
}
void set_canvas_size(lv_obj_t *canvas, lv_coord_t width, lv_coord_t height)
{
if (canvas != NULL)
{
lv_canvas_set_buffer(canvas, lv_malloc(LV_CANVAS_BUF_SIZE_INDEXED_1BIT(width, height)), width, height, LV_IMG_CF_INDEXED_1BIT);
}
}
lv_obj_t *create_keyboard(lv_obj_t *parent)
{
lv_obj_t *keyboard = lv_keyboard_create(parent);
return keyboard;
}
void set_keyboard_target(lv_obj_t *keyboard, lv_obj_t *target)
{
if (keyboard != NULL)
{
lv_keyboard_set_textarea(keyboard, target);
}
}
lv_obj_t *create_scrollable_label(lv_obj_t *parent)
{
lv_obj_t *label = lv_label_create(parent);
lv_label_set_text(label, ""); // 初始化为空文本
lv_obj_set_width(label, LV_SIZE_CONTENT); // 根据内容调整宽度
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
lv_obj_set_flex_grow(label, 1);
return label;
}
void set_scrollable_label_text(lv_obj_t *scrollable_label, const char *text)
{
if (scrollable_label != NULL && text != NULL)
{
lv_label_set_text(scrollable_label, text);
}
}
lv_obj_t *create_toggle_btn(lv_obj_t *parent)
{
lv_obj_t *btn = lv_btn_create(parent);
lv_obj_add_flag(btn, LV_OBJ_FLAG_CHECKABLE); // 设置为可选状态
return btn;
}
bool get_toggle_btn_state(lv_obj_t *toggle_btn)
{
if (toggle_btn != NULL)
{
return lv_obj_has_state(toggle_btn, LV_STATE_CHECKED);
}
return false;
}
void set_toggle_btn_state(lv_obj_t *toggle_btn, bool state)
{
if (toggle_btn != NULL)
{
lv_obj_set_state(toggle_btn, state ? LV_STATE_CHECKED : 0);
}
}
lv_obj_t *create_page(lv_obj_t *parent)
{
lv_obj_t *page = lv_obj_create(parent);
lv_obj_set_size(page, LV_PCT(100), LV_PCT(100)); // 默认全屏大小
lv_obj_set_style_pad_all(page, 0, 0); // 设置内边距为0
lv_obj_set_style_clip_corner(page, true, 0); // 启用裁剪
lv_obj_set_scrollbar_mode(page, LV_SCROLLBAR_MODE_AUTO); // 自动滚动条
return page;
}
void set_page_scroll_dir(lv_obj_t *page, lv_dir_t dir)
{
if (page != NULL)
{
lv_obj_set_scroll_dir(page, dir);
}
}
lv_obj_t *create_popup_menu(lv_obj_t *parent, const char *title, const char **options)
{
lv_obj_t *menu = lv_dropdown_create(parent);
lv_dropdown_set_options_static(menu, options);
lv_dropdown_set_text(menu, title);
return menu;
}
void set_popup_menu_options(lv_obj_t *popup_menu, const char **options)
{
if (popup_menu != NULL && options != NULL)
{
lv_dropdown_set_options_static(popup_menu, options);
}
}
lv_anim_t *create_progress_bar_anim(lv_obj_t *progress_bar, int32_t start, int32_t end, uint32_t time, lv_anim_path_t *path)
{
lv_anim_t *anim = lv_malloc(sizeof(lv_anim_t));
lv_anim_init(anim);
lv_anim_set_var(anim, progress_bar);
lv_anim_set_values(anim, start, end);
lv_anim_set_time(anim, time);
lv_anim_set_path(anim, path);
return anim;
}
void set_progress_bar_anim_path(lv_anim_t *anim, lv_anim_path_t *path)
{
if (anim != NULL && path != NULL)
{
lv_anim_set_path(anim, path);
}
}
lv_obj_t *create_volume_ctrl(lv_obj_t *parent)
{
lv_obj_t *slider = lv_slider_create(parent);
lv_slider_set_range(slider, 0, 100); // 默认范围0-100
return slider;
}
void set_volume_ctrl_volume(lv_obj_t *volume_ctrl, int32_t volume)
{
if (volume_ctrl != NULL)
{
lv_slider_set_value(volume_ctrl, volume, LV_ANIM_ON);
}
}
lv_obj_t *create_data_table(lv_obj_t *parent, int row_cnt, int col_cnt)
{
lv_obj_t *table = lv_table_create(parent);
lv_table_set_row_cnt(table, row_cnt);
lv_table_set_col_cnt(table, col_cnt);
return table;
}
void set_data_table_cell_text(lv_obj_t *table, int row, int col, const char *text)
{
if (table != NULL && text != NULL)
{
lv_table_set_cell_value(table, row, col, text);
}
}
lv_obj_t *create_color_wheel(lv_obj_t *parent, bool wheel)
{
lv_obj_t *colorwheel = lv_colorwheel_create(parent, wheel);
return colorwheel;
}
lv_color_t get_color_wheel_color(lv_obj_t *color_wheel)
{
if (color_wheel != NULL)
{
return lv_colorwheel_get_rgb(color_wheel);
}
return lv_color_black();
}
lv_obj_t *create_nav_bar(lv_obj_t *parent)
{
lv_obj_t *nav_bar = lv_btnmatrix_create(parent);
return nav_bar;
}
lv_obj_t *add_nav_bar_btn(lv_obj_t *nav_bar, const char *label, lv_event_cb_t cb)
{
if (nav_bar != NULL)
{
lv_obj_t *btn = lv_btn_create(nav_bar);
lv_obj_set_size(btn, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_obj_t *label_ptr = lv_label_create(btn);
lv_label_set_text(label_ptr, label);
lv_obj_add_event_cb(btn, cb, LV_EVENT_CLICKED, NULL);
return btn;
}
return NULL;
}
lv_obj_t *create_calendar(lv_obj_t *parent)
{
lv_obj_t *calendar = lv_calendar_create(parent);
return calendar;
}
void set_calendar_date(lv_obj_t *calendar, int year, int month, int day)
{
if (calendar != NULL)
{
lv_calendar_date_t date;
date.year = year;
date.month = month;
date.day = day;
lv_calendar_set_today_date(calendar, &date);
}
}
lv_obj_t *create_time_picker(lv_obj_t *parent)
{
lv_obj_t *time_picker = lv_roller_create(parent);
return time_picker;
}
void get_time_picker_time(lv_obj_t *time_picker, int *hour, int *minute)
{
if (time_picker != NULL && hour != NULL && minute != NULL)
{
char buf[10];
lv_roller_get_selected_str(time_picker, buf, sizeof(buf));
sscanf(buf, "%d:%d", hour, minute);
}
}
lv_obj_t *create_tabview(lv_obj_t *parent)
{
lv_obj_t *tabview = lv_tabview_create(parent, LV_DIR_TOP, 50);
return tabview;
}
lv_obj_t *add_tabview_tab(lv_obj_t *tabview, const char *title)
{
if (tabview != NULL && title != NULL)
{
return lv_tabview_add_tab(tabview, title);
}
return NULL;
}
lv_obj_t *create_info_popup(lv_obj_t *parent, const char *message)
{
lv_obj_t *msgbox = lv_msgbox_create(parent, "Info", message, NULL, true);
lv_obj_center(msgbox);
return msgbox;
}
void show_info_popup(lv_obj_t *popup)
{
if (popup != NULL)
{
lv_obj_clear_flag(popup, LV_OBJ_FLAG_HIDDEN);
}
}
void hide_info_popup(lv_obj_t *popup)
{
if (popup != NULL)
{
lv_obj_add_flag(popup, LV_OBJ_FLAG_HIDDEN);
}
}
lv_obj_t *create_qr_code(lv_obj_t *parent, const char *text)
{
lv_obj_t *qr = lv_qrcode_create(parent, 150, lv_color_hex3(0x000), lv_color_hex3(0xFFF));
lv_qrcode_update(qr, text, strlen(text));
return qr;
}
void update_qr_code(lv_obj_t *qr_code, const char *text)
{
if (qr_code != NULL && text != NULL)
{
lv_qrcode_update(qr_code, text, strlen(text));
}
}
lv_obj_t *create_message_box(lv_obj_t *parent, const char *title, const char *message)
{
static const char *btns[] = {"OK", ""};
lv_obj_t *msgbox = lv_msgbox_create(parent, title, message, btns, true);
lv_obj_center(msgbox);
return msgbox;
}
void show_message_box(lv_obj_t *msgbox)
{
if (msgbox != NULL)
{
lv_obj_clear_flag(msgbox, LV_OBJ_FLAG_HIDDEN);
}
}
void hide_message_box(lv_obj_t *msgbox)
{
if (msgbox != NULL)
{
lv_obj_add_flag(msgbox, LV_OBJ_FLAG_HIDDEN);
}
}
lv_obj_t *create_switch(lv_obj_t *parent)
{
lv_obj_t *sw = lv_switch_create(parent);
return sw;
}
void set_switch_state(lv_obj_t *sw, bool state)
{
if (sw != NULL)
{
lv_obj_add_state(sw, state ? LV_STATE_CHECKED : 0);
}
}
bool get_switch_state(lv_obj_t *sw)
{
if (sw != NULL)
{
return lv_obj_has_state(sw, LV_STATE_CHECKED);
}
return false;
}
lv_obj_t *create_slider(lv_obj_t *parent, int32_t min, int32_t max)
{
lv_obj_t *slider = lv_slider_create(parent);
lv_slider_set_range(slider, min, max);
return slider;
}
void set_slider_value(lv_obj_t *slider, int32_t value)
{
if (slider != NULL)
{
lv_slider_set_value(slider, value, LV_ANIM_ON);
}
}
int32_t get_slider_value(lv_obj_t *slider)
{
if (slider != NULL)
{
return lv_slider_get_value(slider);
}
return 0;
}
lv_obj_t *create_wave_bar(lv_obj_t *parent)
{
lv_obj_t *wave_bar = lv_bar_create(parent);
return wave_bar;
}
void set_wave_bar_value(lv_obj_t *wave_bar, int32_t value)
{
if (wave_bar != NULL)
{
lv_bar_set_value(wave_bar, value, LV_ANIM_ON);
}
}
lv_obj_t *create_image(lv_obj_t *parent, const void *image_src)
{
lv_obj_t *image = lv_img_create(parent);
lv_img_set_src(image, image_src);
return image;
}
void set_image_src(lv_obj_t *image, const void *image_src)
{
if (image != NULL)
{
lv_img_set_src(image, image_src);
}
}
lv_obj_t *create_checkbox(lv_obj_t *parent, const char *text)
{
lv_obj_t *checkbox = lv_checkbox_create(parent);
lv_checkbox_set_text(checkbox, text);
return checkbox;
}
void set_checkbox_state(lv_obj_t *checkbox, bool state)
{
if (checkbox != NULL)
{
lv_checkbox_set_state(checkbox, state ? LV_STATE_CHECKED : LV_STATE_DEFAULT);
}
}
bool get_checkbox_state(lv_obj_t *checkbox)
{
if (checkbox != NULL)
{
return lv_checkbox_is_checked(checkbox);
}
return false;
}
lv_obj_t *create_textarea(lv_obj_t *parent)
{
lv_obj_t *textarea = lv_textarea_create(parent);
lv_textarea_set_one_line(textarea, false);
return textarea;
}
void set_textarea_placeholder(lv_obj_t *textarea, const char *placeholder)
{
if (textarea != NULL)
{
lv_textarea_set_placeholder_text(textarea, placeholder);
}
}
lv_obj_t *create_spinbox(lv_obj_t *parent, int32_t min, int32_t max)
{
lv_obj_t *spinbox = lv_spinbox_create(parent);
lv_spinbox_set_range(spinbox, min, max);
return spinbox;
}
void set_spinbox_value(lv_obj_t *spinbox, int32_t value)
{
if (spinbox != NULL)
{
lv_spinbox_set_value(spinbox, value);
}
}
int32_t get_spinbox_value(lv_obj_t *spinbox)
{
if (spinbox != NULL)
{
return lv_spinbox_get_value(spinbox);
}
return 0;
}
lv_obj_t *create_round_btn(lv_obj_t *parent, const char *text)
{
lv_obj_t *btn = lv_btn_create(parent);
lv_obj_set_style_radius(btn, LV_RADIUS_CIRCLE, 0);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, text);
return btn;
}
void set_round_btn_text(lv_obj_t *btn, const char *text)
{
if (btn != NULL)
{
lv_obj_t *label = lv_obj_get_child(btn, 0);
if (label != NULL && lv_obj_check_type(label, &lv_label_class))
{
lv_label_set_text(label, text);
}
}
}
lv_obj_t *create_picker(lv_obj_t *parent, const char *options)
{
lv_obj_t *picker = lv_roller_create(parent);
lv_roller_set_options(picker, options, LV_ROLLER_MODE_INIFINITE);
return picker;
}
void set_picker_options(lv_obj_t *picker, const char *options)
{
if (picker != NULL && options != NULL)
{
lv_roller_set_options(picker, options, LV_ROLLER_MODE_INIFINITE);
}
}
lv_obj_t *create_card_view(lv_obj_t *parent)
{
lv_obj_t *card_view = lv_obj_create(parent);
lv_obj_set_flex_flow(card_view, LV_FLEX_FLOW_COLUMN);
lv_obj_add_flag(card_view, LV_OBJ_FLAG_SCROLLABLE);
return card_view;
}
lv_obj_t *add_card(lv_obj_t *card_view, const char *title, const char *text)
{
if (card_view != NULL && title != NULL && text != NULL)
{
lv_obj_t *card = lv_obj_create(card_view);
lv_obj_set_style_margin(card, 15, 0);
lv_obj_set_style_padding(card, 10, 0);
lv_obj_t *card_title = lv_label_create(card);
lv_label_set_text(card_title, title);
lv_obj_add_flag(card_title, LV_OBJ_FLAG_ALIGN_TOP);
lv_obj_t *card_text = lv_label_create(card);
lv_label_set_text(card_text, text);
lv_obj_add_flag(card_text, LV_OBJ_FLAG_ALIGN_BOTTOM);
return card;
}
return NULL;
}
lv_obj_t *create_tooltip(lv_obj_t *parent, const char *text)
{
lv_obj_t *tooltip = lv_label_create(parent);
lv_label_set_text(tooltip, text);
lv_obj_set_style_bg_color(tooltip, lv_color_black(), 0);
lv_obj_set_style_text_color(tooltip, lv_color_white(), 0);
lv_obj_set_style_pad_all(tooltip, 5, 0);
lv_obj_set_style_border_width(tooltip, 2, 0);
lv_obj_set_style_radius(tooltip, 5, 0);
lv_obj_set_style_bg_opa(tooltip, LV_OPA_70, 0);
lv_obj_set_style_border_color(tooltip, lv_color_white(), 0);
return tooltip;
}
void set_tooltip_text(lv_obj_t *tooltip, const char *text)
{
if (tooltip != NULL && text != NULL)
{
lv_label_set_text(tooltip, text);
}
}
lv_obj_t *create_list(lv_obj_t *parent)
{
lv_obj_t *list = lv_list_create(parent);
return list;
}
lv_obj_t *add_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb)
{
if (list != NULL && text != NULL)
{
lv_obj_t *btn = lv_list_add_btn(list, NULL, text);
lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, NULL);
return btn;
}
return NULL;
}
lv_obj_t *create_tabview(lv_obj_t *parent)
{
return lv_tabview_create(parent, LV_DIR_TOP, 50);
}
lv_obj_t *add_tab(lv_obj_t *tabview, const char *title)
{
if (tabview != NULL && title != NULL)
{
return lv_tabview_add_tab(tabview, title);
}
return NULL;
}
lv_obj_t *create_calendar(lv_obj_t *parent)
{
lv_obj_t *calendar = lv_calendar_create(parent);
return calendar;
}
void set_calendar_date(lv_obj_t *calendar, uint16_t year, uint8_t month, uint8_t day)
{
if (calendar != NULL)
{
lv_calendar_date_t date;
date.year = year;
date.month = month;
date.day = day;
lv_calendar_set_today_date(calendar, &date);
lv_calendar_set_showed_date(calendar, &date);
}
}
lv_obj_t *create_anim_obj(lv_obj_t *parent)
{
lv_obj_t *anim_obj = lv_obj_create(parent);
return anim_obj;
}
void set_anim_properties(lv_obj_t *anim_obj, lv_coord_t start_x, lv_coord_t start_y, lv_coord_t end_x, lv_coord_t end_y, uint32_t duration)
{
if (anim_obj == NULL)
return;
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_exec_cb(&a, anim_obj, (lv_anim_exec_xcb_t)lv_obj_set_x);
lv_anim_set_values(&a, start_x, end_x);
lv_anim_set_time(&a, duration);
lv_anim_start(&a);
lv_anim_set_exec_cb(&a, anim_obj, (lv_anim_exec_xcb_t)lv_obj_set_y);
lv_anim_set_values(&a, start_y, end_y);
lv_anim_set_time(&a, duration);
lv_anim_start(&a);
}
lv_obj_t *create_keyboard(lv_obj_t *parent)
{
lv_obj_t *keyboard = lv_keyboard_create(parent);
return keyboard;
}
void set_keyboard_mode(lv_obj_t *keyboard, lv_keyboard_mode_t mode)
{
if (keyboard != NULL)
{
lv_keyboard_set_mode(keyboard, mode);
}
}
lv_obj_t *create_page_indicator(lv_obj_t *parent)
{
lv_obj_t *indicator = lv_linear_create(parent);
return indicator;
}
void set_page_indicator_page(lv_obj_t *page_indicator, uint16_t page)
{
if (page_indicator != NULL)
{
lv_linear_set_active(page_indicator, page);
}
}
lv_obj_t *create_pointer_lmeter(lv_obj_t *parent)
{
lv_obj_t *lmeter = lv_linemeter_create(parent);
return lmeter;
}
void set_pointer_value(lv_obj_t *pointer, int16_t value)
{
if (pointer != NULL)
{
lv_linemeter_set_value(pointer, value);
}
}
lv_obj_t *create_accelerometer_lmeter(lv_obj_t *parent)
{
lv_obj_t *accelerometer = lv_linemeter_create(parent);
return accelerometer;
}
void set_accelerometer_value(lv_obj_t *accelerometer, int16_t value)
{
if (accelerometer != NULL)
{
lv_linemeter_set_value(accelerometer, value);
}
}
lv_obj_t *create_clock(lv_obj_t *parent)
{
lv_obj_t *clock = lv_obj_create(parent);
return clock;
}
void set_clock_time(lv_obj_t *clock, int8_t hour, int8_t minute, int8_t second)
{
if (clock != NULL)
{
// Custom implementation to set clock's hour, minute, and second
}
}
lv_obj_t *create_progress_ring(lv_obj_t *parent, uint16_t max_value)
{
lv_obj_t *ring = lv_ringmeter_create(parent);
lv_ringmeter_set_range(ring, 0, max_value);
return ring;
}
void update_progress_ring(lv_obj_t *progress_ring, uint16_t value)
{
if (progress_ring != NULL)
{
lv_ringmeter_set_value(progress_ring, value);
}
}
lv_obj_t *create_color_picker(lv_obj_t *parent)
{
lv_obj_t *color_picker = lv_colorwheel_create(parent, true);
return color_picker;
}
lv_color_t get_color_picker_color(lv_obj_t *color_picker)
{
if (color_picker != NULL)
{
return lv_colorwheel_get_rgb(color_picker);
}
return lv_color_black();
}
lv_obj_t *create_gauge(lv_obj_t *parent, int32_t min, int32_t max)
{
lv_obj_t *gauge = lv_gauge_create(parent);
lv_gauge_set_range(gauge, min, max);
return gauge;
}
void set_gauge_value(lv_obj_t *gauge, int32_t value)
{
if (gauge != NULL)
{
lv_gauge_set_value(gauge, 0, value); // Assuming first needle
}
}
lv_obj_t *create_separator(lv_obj_t *parent)
{
lv_obj_t *separator = lv_obj_create(parent);
return separator;
}
void set_separator_direction(lv_obj_t *separator, lv_dir_t dir)
{
if (separator != NULL)
{
lv_obj_set_size(separator, (dir == LV_DIR_HOR) ? LV_PCT(100) : 2, (dir == LV_DIR_HOR) ? 2 : LV_PCT(100));
}
}
lv_obj_t *create_select_switch(lv_obj_t *parent, const char *options)
{
lv_obj_t *select_switch = lv_roller_create(parent);
lv_roller_set_options(select_switch, options, LV_ROLLER_MODE_NORMAL);
return select_switch;
}
void set_select_switch_options(lv_obj_t *select_switch, const char *options)
{
if (select_switch != NULL)
{
lv_roller_set_options(select_switch, options, LV_ROLLER_MODE_NORMAL);
}
}
lv_obj_t *create_task_done(lv_obj_t *parent)
{
lv_obj_t *task_done = lv_obj_create(parent);
lv_obj_add_flag(task_done, LV_OBJ_FLAG_HIDDEN); // Initially hidden
return task_done;
}
void set_task_done_status(lv_obj_t *task_done, bool done)
{
if (task_done != NULL)
{
if (done)
{
lv_obj_clear_flag(task_done, LV_OBJ_FLAG_HIDDEN);
}
else
{
lv_obj_add_flag(task_done, LV_OBJ_FLAG_HIDDEN);
}
}
}