1、简介
据ARM-2D使用文档介绍,切换不同的图形界面是通过场景(Scene)切换完成的,默认的Demo只有一个场景,如果需要切换至新的界面,则需要用到新的场景。以下介绍arm-2d库多场景创建及运行。
2、新建场景
打开Keil的RTE运行时环境管理
将Scene数量改成3,由于scene0默认被示例demo占用,因此使用scene1和scene2
新建场景源文件如下:
3、场景切换代码
main.c引入头文件
#include "arm_2d_helper.h" #include "arm_2d_disp_adapters.h" #include "arm_2d_scenes.h"
main.c增加场景切换逻辑代码
static void Scenes_test(){ arm_2d_scene1_init(&DISP0_ADAPTER);//初始化场景1 arm_2d_scene_player_switch_to_next_scene(&DISP0_ADAPTER); arm_2d_scene_player_set_switching_mode( &DISP0_ADAPTER,ARM_2D_SCENE_SWITCH_MODE_SLIDE_UP);//向上滑动 arm_2d_scene_player_set_switching_period(&DISP0_ADAPTER, 40); HAL_Delay(800); arm_2d_scene2_init(&DISP0_ADAPTER);//初始化场景2 arm_2d_scene_player_switch_to_next_scene(&DISP0_ADAPTER); arm_2d_scene_player_set_switching_mode( &DISP0_ADAPTER,ARM_2D_SCENE_SWITCH_MODE_SLIDE_LEFT);//向左滑动 arm_2d_scene_player_set_switching_period(&DISP0_ADAPTER, 40); HAL_Delay(800); }
while循环切换场景1、2
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ Scenes_test(); } /* USER CODE END 3 */
刷新任务放到systick中断回调函数
更改场景2显示内容,创建按钮并显示文本内容
static void draw_buttom(const arm_2d_tile_t *ptTile, //绘制按钮 arm_2d_region_t *ptRegion, const char *pchString, COLOUR_INT tColour, uint8_t chOpacity, bool bIsNewFrame) { arm_2d_container(ptTile, __button, ptRegion) { draw_round_corner_box(&__button, NULL, GLCD_COLOR_WHITE, 128, bIsNewFrame); arm_lcd_text_set_target_framebuffer((arm_2d_tile_t *)&__button); arm_lcd_text_set_font((arm_2d_font_t *)&ARM_2D_FONT_16x24.use_as__arm_2d_font_t);//设置字体大小 arm_lcd_text_set_opacity(chOpacity); arm_lcd_text_set_colour(tColour, GLCD_COLOR_BLACK); arm_print_banner(pchString, __button_canvas); arm_lcd_text_set_opacity(255); } } static IMPL_PFB_ON_DRAW(__pfb_draw_scene2_handler) { user_scene_2_t *ptThis = (user_scene_2_t *)pTarget; ARM_2D_UNUSED(ptTile); ARM_2D_UNUSED(bIsNewFrame); arm_2d_canvas(ptTile, __top_canvas) { arm_2d_fill_colour(ptTile, NULL, GLCD_COLOR_WHITE); arm_2d_align_centre(__top_canvas, 120, 60 ) { draw_round_corner_box( ptTile, &__centre_region, GLCD_COLOR_BLUE, 255, bIsNewFrame); ARM_2D_OP_WAIT_ASYNC(); draw_round_corner_border( ptTile, &__centre_region, GLCD_COLOR_BLACK, (arm_2d_border_opacity_t) {32, 32, 255, 255}, (arm_2d_corner_opacity_t) {0, 128, 128, 128}); draw_buttom(ptTile, &__centre_region, "EEPW", GLCD_COLOR_RED, 255, bIsNewFrame); } } arm_2d_op_wait_async(NULL); return arm_fsm_rt_cpl; }
4、运行效果
通过切换场景1与场景2,实现了显示画面切换