|
大家好,我正在设计一个UI界面,程序启动时希望有一个启动界面,现在的做法参考armfly开发例程中的启动界面程序,调用一个桌面回调函数对一个矩形区域进行刷新,源程序是在回调函数里进行背景刷新和位图刷新,现在我是使用jpg图片作为背景的,如果采用原来的方法每次刷新图片和位图,由于刷新时间较长,会出现抖动现象,所以想着可以先绘制背景图片,然后只对位图进行刷新,不知道这样应该怎么实现?劳烦哪位大神帮忙下,谢啦!代码如下所示:
void Startup(void)
{
uint8_t loop = 16 ;
GUI_RECT Rect = {347, 307, 453, 317};
/* éèÖÃ×àÃæ′°¿úμÄ»Øμ÷oˉêy */
WM_SetCallback(WM_HBKWIN, _cbBk_logo);
// GUI_DrawGradientV(0, 0, LCD_GetXSize()-1, LCD_GetYSize() - 1, GUI_BLUE, GUI_WHITE);
// GUI_DrawBitmap(&bmlogo_bdtech , (LCD_GetXSize() - bmlogo_bdtech .XSize)/2 , (LCD_GetYSize() - bmlogo_bdtech .YSize)/2);
GUI_JPEG_Draw(StartUp, sizeof(StartUp), 0, 0);
/* éèÖÃÆô¶ˉ½çÃæμĶˉì¬ÏÔê¾ */
while (loop--)
{
idx = (16- loop) % 5;
/* èÃÖ¸¶¨ÇøóòÎTD§′ó¶ø′¥·¢»Øμ÷oˉêyμÄWM_PAINTÖØ»æÏûÏ¢ */
WM_InvalidateArea(&Rect);
GUI_DrawRectEx(&Rect);
GUI_Delay(200);
}
}
/*
*********************************************************************************************************
* oˉ êy Ãû: _cbBk
* 1|ÄüËμÃ÷: ×àÃæ′°¿úμÄÖØ»æoˉêy
* DÎ 2ΣopMsg WM_MESSAGEààDíÖ¸ÕëμØÖ·
* ·μ »Ø Öμ: ÎT
*********************************************************************************************************
*/
static void _cbBk_logo(WM_MESSAGE * pMsg)
{
uint16_t xPos, Step = 20, i;
const GUI_BITMAP * pBm;
switch (pMsg->MsgId)
{
/* ×àÃæ′°¿úμÄÖØ»æ */
case WM_PAINT:
for (i = 0, xPos = LCD_GetXSize() / 2 - 2 * Step; i < 5; i++, xPos += Step)
{
pBm = (idx == i) ? &_bmWhiteCircle_10x10 : &_bmWhiteCircle_6x6;
GUI_DrawBitmap(pBm, xPos - pBm->XSize / 2, 312 - pBm->YSize / 2);
}
break;
}
} |
|