滑动菜单及滑动解锁技术分析

来源:互联网 发布:淘宝 银联在线支付 编辑:程序博客网 时间:2024/06/06 03:19

自从IPHONE横空出世以来,可以说是在手机界掀起了一场洪洪烈烈的触屏革命;
这是以触屏的更广泛应用为前体,触屏的特效演示为热点,越来越多的创意和点子开始集中在这个领域。触屏游戏,触屏画笔,滑动菜单,滑动解锁等功能彻底颠覆了以往手机触屏只用于点击和手写的观念。在这个只有几寸的屏幕上,勤奋的大脑在不停的开拓,灵活的手指在表演着令人惊诧的舞蹈。
这段时间经常遇到有朋友问了滑动菜单和滑动解锁应该怎么设计,刚开始没怎么在意,后来一次网上一查,发现触屏已经成了主流。如何在有限的屏幕上开发出更利于操作,更吸引人眼球的效果,已经成了手机UI设计的重中之重。周末没事,就找了一些手机的图片看了看,研究了一下滑动菜单的特效。其实简单的来说,该特效就是为触屏添加一个mmi_pen_register_move_handler函数,剩下的就是根据触笔MOVE的X,Y座标,调整屏上被移动图片或者图层的位置座标,重新刷到屏上。
由于本人主要是研究MTK平台,所以其他的平台API也不了解,不过大致算法应该差不多。
做滑动菜单大约需要几方面的知识储备:
一是MTK的层概念,如果不使用层,在滑动的过程中,图像处理时频繁的贴图将会很大的影响显示效果,提前贴好在层里,需要时刷到屏上无疑是最好的方法,另外如果不使用层,复杂的组合图形,图片的堆叠了维护十分繁琐。
主要用到以下API,
gdi_layer_get_blt_layer_ext
用来获取当前窗口有哪些层,对于复杂的如IDLE,CAM,播放器等窗口,他们原本就是不一层的,如果不知道窗口有几个层,盲目加层,肯定出问题,有朋友合并层时显示不正确,有很大可能就是漏了哪些层
gdi_layer_multi_layer_enable
打开多层可用,有些窗口可能已经打开了,退出窗口时要调用gdi_layer_multi_layer_disable
然后是创建层:gdi_layer_create
创建了之后要激活,这样添加上的图片才是在这个层中,否则是在当前激活层中:gdi_layer_set_active

清理层,设置层的通透色
gdi_layer_clear
gdi_layer_set_source_key

获得基础层,该层在进入EntryNewScreen时就已经激活,但如果你又激活了别的层,处理完了别的层之后,仍然要把他再次激活。
gdi_layer_get_base_handle

还有一个函数是指定要合并的层,这样有一些层可以提前画好,不合并,需要的时候再合并,如果不合并,是不能显示的:
gdi_layer_set_blt_layer
最后别忘了刷新层,要不仍然无法显示,有好几个函数都有这个功能,
gui_BLT_double_buffer
gdi_layer_blt
gdi_layer_blt_previous
当然你要做更复杂的,下面的函数也是不可少的
gdi_layer_lock_frame_buffer
gdi_layer_unlock_frame_buffer
gdi_layer_create_using_outside_memory
OslMalloc
Oslfree

二是MTK的触屏API,
这个最简单了,只要有三个函数就搞定了,
mmi_pen_register_down_handler
mmi_pen_register_move_handler
mmi_pen_register_up_handler
三是图像处理的API,
这部分API相信大家都知道,太简单了,也太多了,有时以至于我们都不知道该用哪个好,我一般设计都使用GDI开头的一类API,需要注意的是,好像在二五平台上,在做贴图的特效时,PNG图片似乎会出问题,显示乱屏了,把背景也通透了等等,因此这部分图片最好使用BMP,另外PNG需要解码,有时在处理高效率的图片特效时,也有有几毫秒到几十毫秒的的延迟。虽然PNG似乎表现更丰富,不容易锯齿,还能直接通透,但特效使用上好像确实不如BMP那样方便。

 

原创粉丝点击