免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1535 | 回复: 0
打印 上一主题 下一主题

android平台实现一个原始的程序框架 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-01 13:47 |只看该作者 |倒序浏览

北京理工大学 20981 陈罡
android平台本身提供了非常强大和灵活的应用程序框架,将Activity与Intent结合起来使用几乎可以做到“无所不能”的地步。具体的使用方法在很多书籍以及android sdk本身提供的ApiDemos里面都有描述,偶在此就不再啰嗦了。
在本文中,偶介绍一种方法可以为希望使用自己编写的框架的朋友提供一个原始的框架,以此抛砖引玉。对于希望使用常规的android ui组件和框架的朋友,这篇文章可能就不太合适了。。。
本框架的主要目的是扩展性比较强,可以很容易扩展和维护,另外可以允许框架的使用者在不了解其内部工作原理的情况下简单地通过直接使用框架的代码和接口进行开发。本文中使用到的技术只是一个简单的实验,基本实现了显示页面的封装和按键、触摸屏的消息传递以及基本的屏幕贴图操作。只使用一个Activity来实现多个页面切换,以及独立处理用户事件的目的。
这个框架分为三个主要的类以及一个类厂,分别为:GraphActivity,GraphView,UiBase,类厂为UiFactory。
下面简单说说这些类的功能:
(1)GraphActivity
本类主要用于实现全屏幕操作的(实现了set_no_title, set_full_screen等基本操作),同时重载了onPause(),onResume()进行程序换入换出的时候现场清理方面的工作。在此类中,包含了GraphView(它是整个框架类的核心类)的对象,本类可以对GraphView对象进行外部管理以及创建和销毁。
(2)GraphView
本类是整个框架的核心类,它是由SurfaceView类派生出来,同时实现了SurfaceHolder类的 Callback接口(这个接口主要用于获得当前surface的状态,包括创建、变化、销毁)。这里的SurfaceHolder类是可以通过lockCanvas()函数获取可以直接高速绘图的Canvas对象,呵呵,有了Canvas对象以后剩下的事情就。。。很爽了。使用完毕以后,需要用 unlockCanvasAndPost()将当前的Canvas对象释放掉。GraphView类还可以收到按键事件,触摸屏事件以及轨迹球事件,通过UiBase类提供的方法将这些事件传递给UiBase的派生类去处理,由此实现了事件的处理(也就是所谓的多态性,利用父类的接口去调用子类的函数)。同时,将GraphView的对象通过IGraphEngine接口类传递到UiBase类的派生类中去,让其派生类可以“透明”地调用GraphView提供的函数(clear,draw,jump等,尤其是这个jump,调用了以后会通过创建其它子类的对象跳转到其它子类的页面中去)。
(3)UiBase
本类是整个Ui框架类的基类,是一个“抽象类”(abstract修饰),其定义了基本的事件处理函数实现(其实都是空的,等待派生类去重载)。在GraphView中,通过UiFactory类厂创建 UiBase的派生类,然后会利用UiBase定义的接口,将GraphView的对象收到按键、触摸屏、轨迹球的事件传递给UiBase的派生类,从而实现消息的向下传递,在派生类中可以直接使用 GraphView的对象进行操作(关于这一点,偶在犹豫是否应该在UiBase中做一个接口函数,让其派生类通过这个接口函数调用GraphView对象的功能。这样做会比较“规范”和安全,因为这样不会把GraphView对象直接暴露给UiBase的派生类;但从另外一个角度来看,这种“匪夷所思”的多加一层调用,增加了调用的路径,降低了调用的效率,毕竟人家GraphView也是个独立的对象嘛。。。hoho,不知道java里面有没有类似inline的东西了。。。知道的朋友烦请告知)
(4)UiFactory
本类是个类厂,简单地说,就是用于创建不同的UiBase派生类的对象的类,例如:UiPageA ,UiPageB,UiPageC都是UiBase的派生类,以后还可以继续定义UiPageD, UiPageE, UiPageF不断定义下去,每个派生类只要把想绘制的图片准备好,然后调用m_eng.draw()函数就可以完成往当前屏幕上绘制的目的了。非常方面实用。
下图是整个架构的类图,希望有不同见解的朋友不吝斧正:

文件:
framework.rar
大小:
37KB
下载:
下载
下面是整个工程的源代码:

文件:
GraphEngTest.rar
大小:
193KB
下载:
下载


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26691/showart_2015029.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP