am架构学习笔记(二) 屏幕切换
来源:互联网 发布:易名网络 编辑:程序博客网 时间:2024/05/09 05:38
一、 am屏 切换到 am屏
am屏切换到am屏,一般由按键事件引发,在am消息处理中,触发MSG_HW_KEYPAD事件,处理该消息时调用Am_EventHandlerFunc函数,再由全局变量g_nEvent的值来决定是否创建am屏。
具体步骤:
1,push/pushEx函数:通过push/pushEx函数,将即将写入的屏幕参数写入屏幕栈的顶层,将旧屏压入第二层。同时在push/pushEx函数中将g_nEvent的值置为LAYERCHANGE。
2,继续Update旧屏的剩下的model。
3,Update完后,若g_nEvent为LAYERCHANGE,则开始创新的am屏。注意:此时的pCurrentBaseLayout仍指向旧屏,因为此时旧屏还没有free掉。
4,创屏准备工作:1,free掉旧屏,pCurrentBaseLayout = NULL;
2,free掉旧屏的hash表,新建本屏幕的hash表。
3,从layoutStack中取出param,该参数存储旧屏传过来的参数。并将这些参数写入新屏的hash表。
5,pCurrentBaseLayout赋值,由于新屏的入口函数已经写入在push/pushEx函数里写入到pScreenList->f_CreateScreen字段里,因此通过:
CreateFun = layoutStack.f_GetCreateFun();
*pCurrentBaseLayout = CreateFun((atom_t_graphics *)(&g_graphicsContext), *param);
即可将所有参数写入pCurrentBaseLayout中,注意,此时只是对新屏的所有model的参数进行了复制,还没有创建。
Note: pCurrentBaseLayout是一个指向am_t_model的指针,因此他可以接受所有model的返回值,因为所有的model类型都继承于am_t_model类型。
6,(*pCurrentBaseLayout)->update((*pCurrentBaseLayout), (t_rect*)&LCD_Screen, *param);
Upadate新屏的所有model,注意此时只是将所有model写到显存,还没有画出来。
7,响应AM_MSG_MMI_PAINT消息,Am_MMI_Render(pCurrentBaseLayout, param);会渲染新屏的所有model。
- am架构学习笔记(二) 屏幕切换
- c++ 学习笔记(02AM)
- Android学习笔记(三七):再谈屏幕切换
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记(三七):再谈屏幕切换
- am架构学习笔记(一) 四种model的update函数的异同
- Android笔记横竖屏幕切换
- Heritrix架构学习笔记(二)
- Android学习笔记<二> Android架构
- MySQL学习笔记(二)架构组成
- motan学习笔记 二 motan架构分析
- HBase学习笔记(二)HBase架构
- Android群英传学习笔记-AM&PM
- 24. Python脚本学习笔记二十四屏幕抓取
- Android的Activity屏幕切换动画(二)
- cocos2d-x学习笔记(二)--场景切换
- 厌倦
- 使用映像劫持,ARP欺骗,autorun.inf等技术的AV杀手mgemtjk.exe,sb.exe,qodwjay.exe,smsovct.exe等2
- 常见数学标点符号 - 英文对照
- 读源码学习equinox启动参数二
- Weblogic8.1 配置总结
- am架构学习笔记(二) 屏幕切换
- DNN 模块开发
- xml注意的问题
- 华为和中兴的一点对比
- 07年度小结
- 使用反射、泛型和委托,动态调用对象的属性和方法——性能和灵活性兼备的方法
- 我靠!!!
- CSS -- 颜色渐变
- windows操作系统进程[转]