使用lvgl结合Ivgl的中文/英文手册,构建一个公交卡的充值首界面 a.该界面有背景画面(找一下lvimgcreate()) b.有2个按钮,一个按钮是在线充值,另一个按钮是圈存(在线充值后将账户余额刷入卡内) c.按下在线充值按钮后能够绘制一个新界面,该界面使用lvobjcreate()创建,内容待定(printf打印一句话表示触发了该按钮) d按下圈存按钮后能够绘制一个新界面,该界面使用lyobicreate()创建,内容待定(printf打印一句话表示触发了该按钮
时间: 2024-03-02 17:50:09 浏览: 118
好的,我明白了您的要求。以下是实现该功能的代码示例:
```c
#include "lvgl/lvgl.h"
#include "lvgl/lv_img_decoder.h"
#include "ivgl.h"
#include <stdio.h>
static lv_obj_t * online_recharge_screen;
static lv_obj_t * transfer_screen;
void online_recharge_cb(lv_obj_t * btn, lv_event_t event)
{
if (event == LV_EVENT_CLICKED) {
printf("Clicked online recharge button\n");
lv_obj_clean(lv_scr_act());
online_recharge_screen = lv_obj_create(NULL, NULL);
lv_obj_set_size(online_recharge_screen, LV_HOR_RES, LV_VER_RES);
lv_obj_t * label = lv_label_create(online_recharge_screen, NULL);
lv_label_set_text(label, "Online recharge screen");
}
}
void transfer_cb(lv_obj_t * btn, lv_event_t event)
{
if (event == LV_EVENT_CLICKED) {
printf("Clicked transfer button\n");
lv_obj_clean(lv_scr_act());
transfer_screen = lv_obj_create(NULL, NULL);
lv_obj_set_size(transfer_screen, LV_HOR_RES, LV_VER_RES);
lv_obj_t * label = lv_label_create(transfer_screen, NULL);
lv_label_set_text(label, "Transfer screen");
}
}
void create_main_screen(void)
{
// Create a screen object
lv_obj_t * screen = lv_obj_create(NULL, NULL);
lv_scr_load(screen);
// Create a background image
lv_img_set_src(lv_img_create(screen, NULL), &bus_card_img);
// Create two buttons
lv_obj_t * online_recharge_btn = lv_btn_create(screen, NULL);
lv_obj_set_pos(online_recharge_btn, 50, 50);
lv_obj_set_size(online_recharge_btn, 200, 80);
lv_obj_set_event_cb(online_recharge_btn, online_recharge_cb);
lv_obj_t * online_recharge_label = lv_label_create(online_recharge_btn, NULL);
lv_label_set_text(online_recharge_label, "Online recharge");
lv_obj_t * transfer_btn = lv_btn_create(screen, NULL);
lv_obj_set_pos(transfer_btn, 50, 150);
lv_obj_set_size(transfer_btn, 200, 80);
lv_obj_set_event_cb(transfer_btn, transfer_cb);
lv_obj_t * transfer_label = lv_label_create(transfer_btn, NULL);
lv_label_set_text(transfer_label, "Transfer");
}
int main(void)
{
lv_init();
// Initialize the image decoder
lv_img_decoder_init();
// Load the image from the binary file
lv_img_cf_t cf = lv_img_src_get_format(&bus_card_img);
lv_img_decoder_open_ram(&bus_card_img, cf);
lv_img_decoder_info_t info;
lv_img_decoder_get_info(&bus_card_img, &info);
lv_img_decoder_read_line(&bus_card_img, NULL);
// Create the main screen
create_main_screen();
while (1) {
lv_task_handler();
}
return 0;
}
```
注意事项:
1. 上述代码中使用了一个名为 `bus_card_img` 的全局变量,该变量存储了公交卡的背景图片。您需要在项目中添加该图片文件,并将其转换为 C 语言数组形式,方便程序读取。具体转换方法可以参考 LVGL 官方文档或者其他相关资料。
2. 在 `online_recharge_cb()` 和 `transfer_cb()` 函数中,使用了 `lv_obj_clean()` 函数清空了当前的屏幕对象,然后创建了新的屏幕对象。如果您需要在新的屏幕对象中添加其他控件,可以在这两个函数中进行添加。
阅读全文