当前位置: 首页 > news >正文

MTK层的运用

近日高仿机大行其道
丰富的视觉效果
方便的触摸操作
成了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

相关文章:

  • 树莓派上运行docker
  • 提供一个简单的滑动菜单的数据结构
  • PHP Ajax动态列表的后退操作——保存列表内容和点击位置
  • 对MTK的层简单封装以方便使用
  • PHP RC4 加解密类
  • Python 采集相关设定
  • 从MTK的scat文件谈ROM和RAM的分配,管理和问题解决
  • MTK资源管理和问题解决
  • 基于树莓派使用DuerOS的笔记,待续
  • 树莓派、百度DuerOS等RAW格式的镜像浏览、提取文件的方法
  • 几个常见的C语言面试题分析
  • Linux定期备份mysql
  • MTK基于基站和小区的定位技术研究
  • 第一次交叉编译基于群晖 213j(CPU:Armada 370)的iperf过程
  • MTK界面设计中消除PNG图片的杂色背景
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 30天自制操作系统-2
  • 345-反转字符串中的元音字母
  • IDEA 插件开发入门教程
  • in typeof instanceof ===这些运算符有什么作用
  • Java读取Properties文件的六种方法
  • JS 面试题总结
  • JS学习笔记——闭包
  • Linux链接文件
  • MySQL数据库运维之数据恢复
  • Python 基础起步 (十) 什么叫函数?
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • springMvc学习笔记(2)
  • Swift 中的尾递归和蹦床
  • Vue.js源码(2):初探List Rendering
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 创建一种深思熟虑的文化
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 物联网链路协议
  • 优秀架构师必须掌握的架构思维
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (33)STM32——485实验笔记
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)shell调试方法
  • .CSS-hover 的解释
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET CORE使用Redis分布式锁续命(续期)问题