学习微影项目-day1总结
来源:互联网 发布:北京楼盘数据 编辑:程序博客网 时间:2024/06/05 06:31
之前学习了几款MVP项目,几个项目的MVP架构都不同,果然每个人的代码风格都不一样。前边大部分学习的是新闻阅读类App,接下来准备学习这款视频播放类的APP。
微影,在线观看视频App,基于Material Design + MVP + RxJava + Retrofit + Realm + Glide
不过这款App真的是用到的开源很多,多的有点杂乱,我在学习的时候还是将一些功能类似的第三方改为之前用过的,毕竟自己用的都是目前最流行,最新的,所以小伙伴们,看完我的总结,你们可以去学习我的代码,我的代码比较适合基础薄弱的同学看,大部分抽取的基类相对于其他人的的抽象的,我的代码比较符合常规逻辑,有些修改为自己可以理解的。
附上我的代码地址
掌上影院,基于Material Design + MVP + RxJava + Retrofit + Realm + Glide
这两天花了一点时间先将项目的整体框架搭了出来
下边对搭建框架过程先理一个思路,之后整理出在搭建框架的过程中遇到的一些问题以及解决办法。
首先是当前的包结构
这就不用解释了,功能划分的很清晰
首先从AndroidManifest.xml开始
首先是application节点,新建一个App类继承Application. 在Android中,启动一个应用,首先会初始化Application,所以将需要的全局属性,以及需要初始化的方法实例都可以写在appication中。
在我的Application中,有这几个方法
private Set<Activity> allActivities;public void registerActivity(Activity act) { if (allActivities == null) { allActivities = new HashSet<Activity>(); } allActivities.add(act); } public void unregisterActivity(Activity act) { if (allActivities != null) { allActivities.remove(act); } } public void exitApp() { if (allActivities != null) { synchronized (allActivities) { for (Activity act : allActivities) { if (act != null && !act.isFinishing()) act.finish(); } } } android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); }
这里我是用set集合来存取Activity,因为set集合类似一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序,同时Set集合不允许包含相同的元素。
这几个方法的作用是用来记录activity,用来退出多个activity
在每个新建的Activity后,都会调用register方法,所以我将这个方法写在基类BaseActivity中,记录打开的Activity.而取消登记Activity方法写在基类的onDestory中,每个Acitivty在onDestory的时候都会执行这个方法。
接下来进入MainActivity,继承BaseActivity.然后将
设置沉浸式的方法写到这里。其实设置沉浸式的方式很多,到目前为止我也学会好多种,这种方法比较少见,一般在兼容低版本的时候用的多
protected void setTranslucentStatus(boolean on) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window win = getWindow(); WindowManager.LayoutParams winParams = win.getAttributes(); final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; if (on) { winParams.flags |= bits; } else { winParams.flags &= ~bits; } win.setAttributes(winParams); } }
接下来MainActivity中就是绑定布局,这个布局使用的是merge标签,同时没有将布局直接写在布局文件中,而是抽去了一个自定义view。这里merge标签的使用主要是为了减少View树的层次来优化Android的布局,具体可以看我的上一篇文章。
这里的activity_main.xml代码如下
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android"> <com.exercise.handmovie.ui.view.MainView android:id="@+id/main_view" style="@style/both_match_style" /></merge>
紧接着在MainView中,就是我们常规的加载布局,设置布局。以及一些点击事件什么的,具体作者为什么这样做,可能是想保证MainActivity的简洁,清新(纯属自己意淫)。我曾考虑过直接把这些布局写到MainActivity
但是确实造成了臃肿,并且抽取基类也不方便。
目前搭建框架还需要注意的几个地方就是几个自定义控件,以及一个ResideLayout布局。
ResideLayout布局类似于DrawLayout,只不过效果更酷炫,是实现右滑将主页面缩小,左侧显示菜单栏的空间。
使用的话很简单,可参照我的源码,但是查看源码1000多行,目前还没有研究。
之后就是一个禁止滑动的ViewPager。按照作者的写法可以实现禁止滑动,但是感觉代码有点多,所以我还是直接使用自己的方法,代码如下
public class UnScrollViewPager extends ViewPager { public UnScrollViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public UnScrollViewPager(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent arg0) { return true;//该方法返回为true,表明该方法已处理该事件,该事件不会传播出去 }}
对了,还有一件让我很神奇的事情,就是左侧的菜单栏,刚开始作者只给TextView设置文字,而没有设置图片,于是我好奇这些图标在哪里设置,原来是在代码中给TetxView设置的,同时使用了第三方的图片库。今天大概就是这么整理了一下,接下来才是这个项目的重点。
ok,吃晚饭去咯
这是相隔 一天的总结:
这个项目做到第二天,发现可能是由于自己水平有限,理解不了作者的思路,很多代码,很多基类的抽取,很多新的工具类都不太能接受,整体来说,这各项目的编码风格和我之前遇到的所有都不同,个人感觉有些杂乱,最主要的是引用的第三方太多了,感觉学不到东西,意识在晚饭前决定放弃这个项目的学习,在这两天的学习中还是收获很多。今晚在做些整理。
- 学习微影项目-day1总结
- java学习总结day1
- 学习蓝桥杯过程中总结day1
- 小项目练手-Day1
- java基础总结day1
- day1-day30总结
- NOIP 2014 day1总结
- GDOI2015总结 Day1
- SDOI2015 Round2 Day1总结
- 联考1day1总结
- 联考3day1总结
- JZWC【Day1】题解&总结
- CQOI2016 day1 总结
- 集训总结day1
- jdfz 培训总结 Day1
- 夏令营day1总结
- day1-java&oracle总结
- day1模拟赛总结
- Stereo Matching文献笔记之(六):浅谈置信度传播算法(Belief-Propagation)在立体匹配中的应用~
- HDU3790 最短路径问题+dij算法
- 解决ubuntu下umbrello不能保存的问题
- solr教程,值得刚接触搜索开发人员一看
- sqlserver配置C3P0
- 学习微影项目-day1总结
- 谷歌编程风格要求
- 三天打鱼,两天晒网
- 关于ListView+checkbox+edittext错乱问题的总结
- jqueryrotate演示7种不同的旋转效果
- SpringBoot加载静态资源
- MyEclipse快捷键大全
- 关于“三天打渔两天晒网”的算法问题
- Problem G: 时间类的流插入、提取和递增、递减运算