今天忽然想整合一下所学的知识,理一个框架出来,顺带熟悉一下谷歌的Material Design。工做这几年,很遗憾,所在公司都只看重iOS开发,安卓的要按照IOS的设计稿来开发,彻底没有安卓的风格,难免扼腕叹息。百忙之中,抽出时间,原本想理一个框架出来,看来还有许多待完善的地方,后面会继续完善。先看效果图吧(因为大小不能超过2MB,因此压缩了不少,实际效果要好不少)APK下载点这里 android
项目的风格为谷歌的Material风格,其中主要运用到了MVP模式和rxandroid框架,都是简单集成,时间仓促,还没来得及很好封装。主要是Material开发还不是很火,起码就目前市面上看来,比较少产品彻底依照Material风格来设计的,我知道的,有BiliBili、SegmentFault等少数几个,大多数产品只是走马观花般稍微运用了一些Material的元素。我想,产品毕竟注重功能和稳定。由于Material开发的过程当中,确实有不少坑,好比,NestedScrollView在与AppBarLayout一块儿滑动的时候,就会莫名出现卡顿,为了解决这个问题,我苦苦搜寻3天,没能找到办法,只好用了一个开源库smooth-app-bar-layout来解决,这个开源库确实还不错,但与其余开源框架或谷歌原生控件结合使用的时候,又会有这样那样的问题出现,好比,使用RecyclerView时要设置一个header才能正常显示,参考这里。git
代码的大致结构以下: github
adapter主要放了主界面ViewPager的adapterapi
api原本是想放置Retrofit相关的接口的,结果运行了个demo没有成功,就不了了之了,如今才作了一个网络请求,直接用的okhttp和rxandroid结合,并无封装成很好的工具框架,你们能够先尝试,我有时间就完成封装。网络
Event主要放置EventBus的一些事件,都是简单的事件,好比通知其余界面刷新UI等。有人说,你这人装,用了RxAndroid为啥不用RxBus,还用什么EventBus。我只能说,萝卜青菜各有所爱,EventBus是个好工具,用起来很是方便,但我不会滥用。app
listener目前尚未写什么,里面放了一个类,原本是用来监听RecyclerView滚动,以实时控制AppBarLayout滚动的,可是这个仅适用于单个Activity的状况,因为主界面有一个ViewPager包含多个Fragment,若是再用这个监听的话,那状况复杂得很,并且切换不一样Fragment时AppBarLayout会闪动,我就直接用了谷歌原生的Material元素来控制了。虽然在包含NestedScrollView的Fragment,向上滚动的时候,部分机型会有卡顿的状况,好比华为P9,其余手机如一加、nexus5暂时没发现这种状况,这实际上是谷歌的一个bug,体验了一下Bilibili的APP,发现这个bug一样存在,暂时尚未很好的替代方案,固然smooth-app-bar-layout能够解决这个bug,可是集成起来不太容易,并且扩展性不太好,好比在smooth-app-bar-layout和smarttablayout之间,你只能选择一个,由于他们的初始化方法不一样,由于我必需要用到smarttablayout的漂亮切换效果,因此主界面直接采用了原生的Material控件。框架
ui是最主要的代码集中地,我为何没有写fragment、activity等包?由于我建议以功能模块划分逻辑功能包,而不是根据文件类别划分,由于同一个界面的功能实现模块就是一个集合,不必把它们强行分开来按文件类型归档,后面MVP的代码也是一个功能放在一个包里,这样找代码的时候,看到包名一会儿就能够找到相关功能的全部代码了。ide
utils里面放置一些公共工具类,好比Toast、获取ToolBar高度等工具
widget里面放置一些开源控件,好比LoadMoreRecyclerView等动画
library项目主要放置了鸿洋大神的CommonAdapter
项目还用到了不少开源框架,有好几个功能点都是直接拿来,还没来得及更改,惭愧,感谢如下大神或开源项目:
多彩资讯客户端
代码家 鸿洋大神 /*网络请求*/ compile 'com.squareup.retrofit2:retrofit:2.2.0' compile 'com.squareup.retrofit2:converter-gson:2.2.0' /*tab切换*/ compile 'com.ogaclejapan.smarttablayout:library:1.6.1@aar' compile 'com.github.bumptech.glide:glide:3.7.0' /*右侧菜单*/ compile 'com.yalantis:contextmenu:1.0.7' /*能够隐藏toolbar的RecyclerView,能够用,但不够流畅,用系统监听代替了*/ /* compile 'com.github.ksoichiro:android-observablescrollview:1.6.0'*/ /*EventBus*/ compile 'org.greenrobot:eventbus:3.0.0' /*Material风格的下拉刷新*/ compile 'com.cjj.materialrefeshlayout:library:1.3.0' compile 'me.henrytao:smooth-app-bar-layout:25.1.0.0' /*compile 'com.github.bumptech.glide:glide:3.6.0'*/ /*圆形头像*/ compile 'de.hdodenhof:circleimageview:1.3.0' /*列表滚动动画*/ compile 'jp.wasabeef:recyclerview-animators:2.2.6'
再次感谢,最后附上本项目github地址,若是你们以为还不错的话就点个star吧。