智慧背景项目总结

最近做了一个仿智慧北京的项目,这是一个类似网易新闻客户端的项目.因为闲来无事,就想把自己之前所学的知识捡起来,顺便看一看自己在哪些知识点方便比较薄弱,所以也算是对自己的一个阶段性的自省吧.下面这张图是这个项目的主界面的效果图的一部分.


智慧背景项目总结
文章图片
效果图

首先做一个项目,必须先搭好ui框架,因为这是唯一与用户交互的接口,所以这个框架的逻辑必须简洁明了,但同时也必须满足大多数用户获取资讯的这个需求.做这个框架我就花了大半天.因为splash页面和新手引导页面非常简单,在此我就不赘述了.
智慧背景项目总结
文章图片
主界面ui框架图 这是我认为整个智慧北京项目最复杂也是最有价值的部分了.整个ui框架以一个actiivty+多个fragment的模式构建,这样既可以简化activity的逻辑,也可以达到解耦的目的.
LeftFragment+ContentFragment实现的侧边栏+主页的效果,既可以通过自定义控件实现,也可以使用开源框架SlidingMenu,这里我们使用了后者,以简便开发流程.
ContentFragment的布局由一个ViewPager+RadioGroup(RadioButton)来实现,ViewPager可以实现五个页面的左右切换.而RadioGroup的点击事件可以通过ViewPager来完成页面的切换.
由于这个标签页的view结构类似,于是通过向上抽取一个抽象类BasePager来封装,并在内部封装两个方法initView()和initData(),因为五个页面的布局结构类似,所以直接在这个父类的initView里完成view的初始化,并通过一个成员变量mRootView来维护这个布局对象.而initData()这里面的数据由子类自己去实现,五个标签页通过继承这个类,继承initView方法,重写initData方法来实现自己的具体的业务逻辑.
接下来就要进入到这个ui框架最容易被绕进去的地方:NewsCenterPager.新闻详情页默认选中NewsMenuDetailPager,NewsMenuDetailPager的ui主体部分由一个viewpager+listview来实现,由于在fragment里已经有一层viewpager,所以此处的viewpager的滑动事件会出现一些小bug,这主要是由于android的事件分发机制导致的,由于上层控件已经拦截了触摸事件,导致触摸事件不能继续传递到下层控件,于是下次viewpager的滑动效果就不能实现,所以此时必须通过重写dispatchTouchEvent方法调用getParent().requestDisallowInterceptTouchEvent(true)来请求父控件及祖宗控件不要拦截子控件的触摸事件,不过此处因为并不是任何时候都是自己处理触摸事件,所以需要判断触摸的位置来判断触摸事件是子控件自己处理还是交给上层控件处理.在这层逻辑中还是用了viewpagerindicator这个开源框架来完成可自动滑动的新闻分类标签和页面指示器的实现.
【智慧背景项目总结】整个智慧北京项目的精华部分也就是在这个ui框架了,我暂时也就总结到这里了,当是对这个项目的一个回顾和总结.等以后有时间了再来做一些完善和补充.

    推荐阅读