找回密码
 注册
搜索
查看: 1869|回复: 15

[资料] 自己网上弄的mmi笔记资料

[复制链接]
发表于 2009-10-14 17:33:25 | 显示全部楼层 |阅读模式
要的快来了,穷得卖家底了,新出炉的资料,绝不忽悠,货真价实,货比三家了,跳楼价!!!!
【文件名】:091014@52RD_mtk笔记.rar
【格 式】:rar
【大 小】:1971K
【简 介】:
【目 录】:



关于mmi各个方面的资料大汇总 ,其中的一个资料简介:
  在某些频繁更新的界面中,如果某些显示元素一直没有变化,我们就可以将这些元素提取出来画到一个模拟的屏幕中,而将一些需要更新的元素画到另外的模拟屏幕,而后将两个模拟屏幕合并到真正的屏幕上,这样我们就节省了不变元素的重画时间,从而减轻了系统负担及加速画面更新。我们把这样的模拟屏幕就叫层,也可以说层就是屏幕的缓冲空间。
例如,如果我们用动画做为背景,将其他的一些元素也画到这一层中,就会出现当动画跳到第二帧后,动画上面的文本及图象都会被盖住。而有了层以后,我们就可以将不变的文本及图象放到新建的一个层中,将动画放到背景层中,每当有动画换帧时,只需将新帧画到背景层中,然后合并两个屏幕(动画刷新时会自动合并),这样上层的文本等就不会被盖住了。
另外,因为层的格式简单且统一,并且一般的图形系统都会用硬件加速合并,所以在层合并时加上些特效会很方便,如通透、半透明、剪切等。
下面将以mmi_phoart_entry_main_screen()为例说明关于层的一些内容。
1.首先,因为用到两个层,所以我们要开启多层
gdi_layer_multi_layer_enable();
等到退出该屏幕的时候需要gdi_layer_multi_layer_disable();
2.创建层:创建层需要先建一个层句柄,我们可以通过该句炳来控制层,函数gdi_layer_create用来创建层
gdi_layer_create(OFFSET_X,OFFSET_Y,WIDTH,HEIGHT,HANDLE_PTR);
OFFSET_X,OFFSET_Y是层的位置坐标,WIDTH,HEIGHT是层的大小;HANDLE_PTR是层句炳,用于返回所创建的层。不过,因为创建层时系统要为其分配动态内存空间,而系统保留的内存一般只够创建一个UI_device_width*UI_device_height大小的层,所以如果已有两个层,而需要再创建新层时,就需要用到函数gdi_layer_create_using_outside_memory(X,Y,WIDTH,HEIGHT,HANDLE_PTR,OUTMEM_PTR,OUTMEM_SIZE)
前5个参数和gdi_layer_create的参数相同,OUTMEM_PTR是存放层的BUFFER,OUTMEM_SIZE是层的大小。
3.激活层:在我们的图形系统中,任何时刻有且只能有一个层处于激活状态,所有的绘画都会默认画到这个激活层中,所以想要在层上绘画必须先将其激活。激活函数是gdi_layer_set_active(gdi_handle handle);不过,由于在多层的处理中需要在各个层之间切换激活,所以我们经常用到的是gdi_layer_push_and_set_active(gdi_handle handle),此函数会把当前的激活层入栈而激活参数层,等到下次需要激活栈中的层时,只需要用函数gdi_layer_pop_and_restore_active()激活就可以了。
4.基础层:系统开机的时候会为每个硬件屏幕创建一个基础层,基础层有以下几个特点:
(1)基础层由系统创建,无法删除。
(2)与硬件屏幕完全重合。
(3)系统默认的激活层,EntryNewScreen时系统会紫铜将基础层激活。
(4)显示更加快速,基础层存储于芯片内的flash中,所以在其上面绘画极快,一般我们会将刷新频繁的内容放在基础层上。
基于以上几点,通常在不使用多层的情况下,我们完全可以将基础层当成硬件屏幕来看待,也就是说普通程序完全可以忽略层的概念。另外,因为系统一般只在EntryNewScreen时才会自动将基础层激活,为避免特殊情况下使用层混乱,通常在新层上绘画完毕后我们会主动将基础层还原为激活状态。
其实,对于我们上面说到的层之间的切换激活而言,大多说情况下是基础层和新层之间的切换。为此需要用到gdi_layer_get_active(gdi_handle *handle_ptr)得到当前激活层句柄(多数情况下是基础层句柄),这样我们就可以切换激活层了。
5.合并:有了多个层,当然要合并到一起了。合并层的函数是gdi_layer_blt_previous(S32 x1, S32 y1, S32 x2, S32 y2),gui_BLT_double_buffer也具有同样的效果。另外,在合并前,我们还需要用函数gdi_layer_set_blt_layer(H1,H2,H3,H4) 来指明需要合并的层。
6。释放:由于空间的问题,我们创建的新层在用完后一定要释放,释放函数是:
gdi_layer_free(gdi_handle handle)。注意:层一般是在退出函数中释放。
说到这儿,我们就可以建立一个多层的屏幕了。下面我们在看看层的一些特效:
1.剪切:所谓剪切,就是在层中设一个限制区域,只有在这个区域中的绘画才是有效的,否则就会被自动忽略。剪切有两个显著的特点,一是每个层一定而且只能有一个剪切区域。二是剪切区域一经设置将永远生效。所以剪切区域用完后最好用gdi_layer_reset_clip()还原。剪切用函数gdi_layer_set_clip()来实现。
2.通透:所谓通透,就是如果我们将某种颜色设为通透色,在层合并的时候,系统会自动将层中与通透色相同的颜色忽略掉,这样我们在这一点上看到的是其下层的颜色。设置通透的函数是gdi_layer_set_source_key。另外在设置通透前我们通常用gdi_layer_clear_background将该层刷上某种颜色。
3.透明:gdi_layer_set_opacity(BOOL opacity_enable, U8 opacity_value)
opacity_enable指通明是否开启,opacity_value指透明度,范围是0至255,值越小越透明。
4.锁屏:由于某些元素要频繁的刷新,而如果我们每次都合并就会很浪费时间,因此我们可以设置两个计数器,一个用来加,一个用来减,当计数器为0时,我们再合并。这两个计数器就是 gdi_layer_lock_frame_buffer()和 gdi_layer_unlock_frame_buffer();
发表于 2009-10-15 10:06:15 | 显示全部楼层
下了再说!!
点评回复

使用道具 举报

发表于 2009-10-15 10:06:54 | 显示全部楼层
希望有用吧!!
点评回复

使用道具 举报

发表于 2009-10-16 13:00:05 | 显示全部楼层
顶啊[em08][em09]
点评回复

使用道具 举报

发表于 2009-10-19 10:09:50 | 显示全部楼层
有在mtk方案公司做mmi 的朋友  可加我 QQ:232284406   我可以介绍兼职给大家,有兴趣的来了解下
点评回复

使用道具 举报

发表于 2009-10-29 15:02:37 | 显示全部楼层
新手学习
点评回复

使用道具 举报

发表于 2009-11-3 20:41:47 | 显示全部楼层
新手学习
本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/Detail_RD.BBS_170566_50_1_1.html
点评回复

使用道具 举报

发表于 2009-11-3 20:42:11 | 显示全部楼层
新手学习
本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/Detail_RD.BBS_170566_50_1_1.html
点评回复

使用道具 举报

发表于 2009-11-3 22:47:22 | 显示全部楼层
我沒下但還是先Thanksb
点评回复

使用道具 举报

发表于 2009-11-10 09:39:57 | 显示全部楼层
thankyou...[em01]
点评回复

使用道具 举报

发表于 2009-11-12 20:45:33 | 显示全部楼层
希望有用啊
点评回复

使用道具 举报

发表于 2009-11-24 19:29:09 | 显示全部楼层
现在就是钱少呀,
点评回复

使用道具 举报

发表于 2009-11-24 19:35:06 | 显示全部楼层
钱不少,不知道内容怎么样,唉,
点评回复

使用道具 举报

发表于 2009-12-9 17:09:00 | 显示全部楼层
谢谢楼主![em01][em01][em01]
点评回复

使用道具 举报

发表于 2010-4-26 16:58:13 | 显示全部楼层
学习一下
点评回复

使用道具 举报

发表于 2010-5-12 12:19:27 | 显示全部楼层
看看先
呵呵
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-2-26 04:42 , Processed in 0.047614 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表