近日高仿机大行其道
丰富的视觉效果
方便的触摸操作
成了MMI设计和模仿的重中之中
当人们在尽情享受这种创意带来的便利的同时
MMI工作者却不得不去设计维护一个个功能越来越复杂,
界面越来越炫丽的令人头痛的窗口,
没有别的办法,稍一失误,就能导到整个窗口界面凌乱,功能失效,
最终使程序员不得不不把大量的时间和精力花在令人头痛的界面维护中,
在那些复杂的代码中寻找着可能的BUG
层的运用也许是解决界面刷新,复杂界面的堆叠,代码维护最好的方法
近日有不少朋友和我讨论层的使用
而MTK有关这方面的资料也确实比较少
少数几个掌握了的人又视之如珍宝
不愿轻易示人
这里举一个简单的例子说明层的创建和运用
在这里我们创建两个层,加上基层一共三个,基层作为背景层,
MTK最多支持四个层合成,层的创建最好放在窗口里或者窗口控件里,
在退出窗口时释放,要不会出问题的。,当然在别的地方创建也是可以的,
但要注意不能是窗口需要频繁调用的函数,因为每次创建窗口都要分配内存,
频繁调用会导致内存耗尽,退出时切记释放。该代码省略了一些与层无关的内容,比如按按键处理,触屏处理,请知悉
gdi_handle my_layer1, my_layer2, my_base_layer;
PU8 buf_ptr;
void exit_myapp_screen(void)
{
if (buf_ptr != NULL)
{
med_free_ext_mem((void **)&buf_ptr);
}
if (my_layer1 != NULL)
{
gdi_layer_free(my_layer1);
}
if (my_layer2 != NULL)
{
gdi_layer_free(my_layer2);
}
}
static void entry_myapp_screen(void)
{
U8 *gui_buffer;
BOOL isEnable;
gdi_color base_color;
EntryNewScreen (SCR_ID_XXXX,exit_myapp_screen,entry_myapp_screen, NULL);
gui_buffer = GetCurrGuiBuffer(SCR_ID_XXXX);
//设置窗口不带状态栏
entry_full_screen();
//开启多层
gdi_layer_multi_layer_enable();
/*该处的2等于((GDI_LCD_WIDTH*GDI_LCD_HEIGHT*GDI_MAINLCD_BIT_PER_PIXEL)>>3)
一个像素使用2个字节表示,即65536色*/
buf_ptr = med_alloc_ext_mem(GDI_LCD_WIDTH*GDI_LCD_HEIGHT*2);
if (buf_ptr == NULL)
{
//加一些错误提示
return;
}
/*从外部内存创建窗口,因为MTK提供的直接创建函数只能创建
一个层和屏幕大小一样的层*/
gdi_layer_create_using_outside_memory(
0,
0,
UI_device_width,
UI_device_height,
&my_layer1,
(PU8) buf_ptr,
(S32) GDI_LCD_WIDTH*GDI_LCD_HEIGHT*2);
//激活新层1
gdi_layer_set_active(my_layer1);
//把背景全刷成红色
gdi_layer_clear_background(GDI_COLOR_RED);
//设置红色为通透色
gdi_layer_set_source_key(TRUE, GDI_COLOR_RED);
/*在层1上画图,位置是相对层的位置,因为层大小和基层一样,
且原点和基层重合,故该座标也是相对屏幕原点的位置*/
gdi_image_draw_id(50, 100, IMG_ID_PHOART_ICON_6);
//创建层2,使用系统提供的直接创建函数从层内存直接创建
gdi_layer_create(0, 0, UI_device_width, UI_device_height, &my_layer2);
//激活新层2
gdi_layer_set_active(my_layer2);
gdi_layer_clear_background(GDI_COLOR_TRANSPARENT);//刷色
gdi_layer_set_source_key(TRUE, GDI_COLOR_TRANSPARENT);//设置通透
//在层2上输出字串
gui_move_text_cursor(50, 200);
gui_print_bordered_text(L"hellow word");
//在最后要激活基层
gdi_layer_get_base_handle(&my_base_layer);
gdi_layer_set_active(my_layer1);
//得到当前活动层的通透属性
gdi_layer_get_source_key(&isEnable, &base_color);
//设置通透
gdi_layer_set_source_key(TRUE, base_color);
//指定合并层,注意叠加的顺序
gdi_layer_set_blt_layer(my_base_layer, my_layer1, my_layer2, 0);
//刷新到屏幕上
gdi_layer_blt_previous(0, 0, UI_device_width - 1, UI_device_height - 1);
}
有关gdi_layer_create函数再说明一点,如果你通过这个函数创建的层大小比屏幕小,倒是可以创建多个的,但你所创建的层大小的总和,不能超过屏幕大小
还有一点需要注意的是,如果程序运行在仿真上,最好使用MALLOC和FREE替换med_alloc_ext_mem和med_free_ext_mem,也就是写成
#ifdef WIN32
malloc
#else
med_alloc_ext_mem
#endif
和
#ifdef WIN32
free
#else
med_free_ext_mem
#endif
分享到:
相关推荐
MTK 层 深入浅出
MTK 层的基础知识笔记/MTK 层的应用/MTK 写窗口/MTK编程起步——常用函数及宏定义/MTK拨号字体大小/mtk常用函数/MTK的DM应用实例/MTK的层和它的一些层函数/MTK的高亮机制/MTK之GPIO设置函数/MTK文件读写相关.....
详细的写明了MTK中应用层的各个函数及其用法
MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK
mtk平台传感器hal层关键代码,其中包括,计步器,加速度器,光线传感器等
MTK WIFI GPIO 配置 MTK5931
联发科刷机win10驱动, MTK = "laurentiumihet.ro" MTK6218 = "MTK USB Port" MTK_COM = "MTK USB Modem Port" MTK_CAT = "MTK USB Debug Port" MTK_PRELOADER = "...
MTK 刷机工具 WWR WWR MTK v2.40
浅谈MTK层的切换 69 一些有用的层函数 72 层核心理念 74 模版 80 MTK屏幕模版 82 MTK的控件和窗体绘制机制 及其事件响应机制 84 详解dm_redraw_category_screen() 90 MTK高亮机制 93 CustomList模板的 制作过程及...
MTK CVE-2020-0069 su文件 使用方式翻译和解释 add by https://blog.csdn.net/OneT1me 1.使用adb命令,将文件push到/data/local/tmp 目录下 2.给这个文件云心权限,具体是chmod +x mtk-su 3.运行mtk-su ./mtk-su 4....
MTK hal层添加水印
MTK配置文件参数说明MTK配置文件参数说明 MTK配置文件参数说明MTK配置文件参数说明 MTK配置文件参数说明 MTK配置文件参数说明
MTK 软件包MTK 软件包MTK 软件包
MTK-COM MTK方案串口读写软件2
MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台
MTK 刷机工具 WWR WWR MTK v2.30
MTK 刷机工具 WWR
MTK开发心得,MTK开发心得,MTK开发心得.
MTK驱动程序下载
MTK入门教程MTK入门教程MTK入门教程MTK入门教程