控件使用示例
常规控件示例
参考网址如下:
lvgl官方网站: https://lvgl.io
lvgl参考例程: https://docs.lvgl.io/master/
- 通过数组变量在程序中表示图片,图片转换成.c文件的工具参考官网:http://lvgl.io/tools/imageconverter
c
uint8_t circle_white_map[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x50, 0xff, 0x7f, 0xff,
........................................................};
const lv_img_dsc_t circle_white = {
.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,
.header.always_zero = 0,
.header.reserved = 0,
.header.w = 20,
.header.h = 20,
.data_size = 400 * LV_IMG_PX_SIZE_ALPHA_BYTE,
.data = circle_white_map,
};
static lv_obj_t * circle_0 = lv_img_create(img_bg);
lv_img_set_src(circle_0, &circle_white);
lv_obj_align(circle_0, LV_ALIGN_BOTTOM_MID, -16, -28);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
这种图片加载速度快,但是占用程序空间和内存,适合小图片的显示,大量的数组图片会导致空间超出限制。
- 通过文件系统加载图片,这种方法需要在程序中指定图片的路径,程序会自动加载图片并显示。
c
lv_obj_t *sub_image00 = lv_img_create(sub_tab0);
lv_img_set_src(sub_image00, LVGL_PATH(cook_0.jpg));//LVGL_PATH宏定义在lv_conf.h中,用于指定图片的路径
lv_obj_set_pos(sub_image00, 36, 100);
1
2
3
4
2
3
4
这种方法加载速度略慢,不过不占用程序空间,适合大图片和多图片的显示。
音视频播放示例
音视频播放器参考代码:packageslvgl-uisimple_player_demo文件夹下面的simple_player.c文件
c
void simple_player_ui_init()
{
if (AICFB_FORMAT == MPP_FMT_RGB_565
|| AICFB_FORMAT == MPP_FMT_ARGB_1555) {
static struct mpp_fb *fd_dev;
struct aicfb_alpha_config alpha = {0};
alpha.layer_id = 1;
alpha.enable = 1;
alpha.mode = 1;
alpha.value = 64; //set ui transparent,255 is max.
fd_dev = mpp_fb_open();
mpp_fb_ioctl(fd_dev, AICFB_UPDATE_ALPHA_CONFIG, &alpha);
mpp_fb_close(fd_dev);
}
FAKE_IMAGE_INIT(bg_dark, 1024, 600, 0, 0x00000000);
img_bg = lv_img_create(lv_scr_act());
lv_img_set_src(img_bg, FAKE_IMAGE_NAME(bg_dark));
create_player(img_bg);
lv_timer_create(player_callback, 20, 0);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
实例通过调用mmp接口,实现音视频播放器的初始化,播放控制。
多线程交互示例
多线程交互示例参考代码:packageslvgl-uielevator_demo文件夹下面的代码
c
void elevator_ui_init()
{
main_level = 1;
main_is_up = true; //0: down, 1: up
last_is_up = main_is_up;
#if AIC_ELEVATOR_INSIDE
aic_elevator_create_main(lv_scr_act());//UI线程初始化
create_player(lv_scr_act());
#ifdef LV_ELEVATOR_UART_COMMAND
evevator_uart_main(); //创建串口线程相关操作
#endif
#else
aic_elevator_create_outside(lv_scr_act());
#endif
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17