前言

 由于喜欢看漫画,顺便练练手,把最近学到的知识整合一遍,
 在线漫画阅读器,项目采用 MVP + RxJava + Retrofit + Dagger2+rxlifecycle .功能上现在只是简单的基本功能。这篇文章主要是记录项目中的难点疑问,以及介绍这个项目

项目github 地址,如果对你有帮助,不妨点个start支持一下。感谢


总体的框架搭建

该项目采用的是MVP配合dagger2搭建,如有小伙伴对这些知识点不熟的可以参考下我个人的这几篇文章

MVP模式与封装

Dagger2讲解

1关于该项目MVP框架的一些解释:

如果你看了该项目的结构你会发现少了这个M层的实现类,我这边是直接让P担任了M的责任。

比如下面的该项目的某个P层的实现

/*** @author Lai* @time 2017/12/11 17:04* @describe 漫画业务桥梁P* @see  SimplePresenter*/
public class ComicsPresenter extends BasePresenter<ComicsContract.View> implements ComicsContract.Model {@Overridepublic void requestHome(@MODE final int curMode) {//数据请求}
}

就让P层直接实现了M层的业务接口

按照规范来说这里应该还需要实例化一个Model层。通过Model在请求请求或处理数据
然后Model的实体类可以通过dagger2去管理实例会添加很多的仓库Module。因为有很多的model仅仅只是做网络请求的操作,不太复杂, 我觉得写的东西太多了,所以省去了M层。

如果你觉得需要Model层

你可以参考一下MVPArms开源项目:
https://github.com/JessYanCoding/MVPArms
MVPArms项目实例项目实例
https://github.com/GitLqr/LQRBiliBlili

文章推荐!!!!!!

安卓实践开发之MVP一步步实现到高级封装 - Losileeya - CSDN博客

浅谈Android中的MVP与动态代理的结合 - Jimmy_Yyj -CSDN博客


首页(HOME)分析

先看动图


布局分析

1.上下滑标题联动

关键字:AppBarLayout layout_scrollFlags

2.上下滑底部联动

这里有几种做法。
1.可以自定义Behavior。大概的做法就是监听变化的View从而实现对其底部的交互
2.监听AppBarLayout addOnOffsetChangedListener 调整底部导航偏移的Y轴 达到底部隐藏效果

        mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {@Overridepublic void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {//调整底部导航偏移的Y轴 达到底部隐藏效果if (isSetBottomSheetHide)mBottomSheet.setTranslationY(-verticalOffset);        }});
3.底部收藏联动

关键字:layout_behavior

一个神奇的控件——Android CoordinatorLayout与Behavior使用指南

看完就明白了!!

首页遇到的问题

1.底部收藏夹的RecyclerView滑动时,标题是会产生联动


解决的方案:
监听底部的收藏夹的状态:当完全打开的时候清除 ScrollFlags联动 参数、关闭时设置回去

/*** 改变搜索布局的行为 ScrollFlags** @param isScroll 是否滚动*/public void setSearchScrollFlags(boolean isScroll) {AppBarLayout.LayoutParams mParams = (AppBarLayout.LayoutParams) mSearchToolbar.getLayoutParams();if (isScroll) {mParams.setScrollFlags(5);} else {mParams.setScrollFlags(0);}mSearchToolbar.setLayoutParams(mParams);}BottomSheetBehavior.from(mBottomSheet).setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {@Overridepublic void onStateChanged(@NonNull View bottomSheet, int newState) {if (BottomSheetBehavior.STATE_EXPANDED == newState) {setSearchScrollFlags(false);} else if (BottomSheetBehavior.STATE_COLLAPSED == newState) {setSearchScrollFlags(true);}}@Overridepublic void onSlide(@NonNull View bottomSheet, float slideOffset) {}});
2.嵌套RecyclerView 问题

 主页布局关系主要是CoordinatorLayout+FrameLayout+RecyclerView +RecyclerView 。画了个图你们感受一下

 问题: 很奇怪,采取这样的布局方式时。当快速滑动的时候,里面的item的点击事件会失灵,不好点。要点击2次,或者停顿一会才恢复正常。也就是快速滑动里面的RecyclerView接受不到事件。

按照平常遇到事件冲突的解决方法是
 
  父类ViewGroup重写onInterceptTouchEvent 根据逻辑判断是否要拦截。

 
 或者子类调用下面的方法,告诉父类是否要拦截
 
 public void requestDisallowInterceptTouchEvent(boolean disallowIntercept);

 起初是这个想法开始改造编写。但是发现这个嵌套失灵的问题解决了,但是与CoordinatorLayout的联动效果没了。这就尴尬了
 
 后来Google了一下发现RecyclerView 有个方法叫做recyclerView.setNestedScrollingEnabled(boolean);
也可以解决嵌套的问题,但是CoordinatorLayout的联动效果也没了。

 要想达到有联动,并且快速滑动时item点击不失灵。
 
最后我采取的方案是:

recyclerView.setNestedScrollingEnabled 配和 AppBarLayout.addOnOffsetChangedListener监听解决。

事件冲突的文章推荐
图解 Android 事件分发机制
Android事件分发机制详解:史上最全面、最易懂
 

3.RecyclerView 优化问题

可以看看我写的文章 RecyclerView的优化

首页的问题就暂时的到这里。


项目github 地址,如果对你有帮助,不妨点个start支持一下。感谢

不定期更新文章。不妨点个start支持一下未完待续!!

Android 开源漫画项目ComicMTC相关推荐

  1. 140款Android开源优秀项目源码

    140款Android开源优秀项目源码 BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefresh ...

  2. 2015年十大热门Android开源新项目

    2015即将结束,又到了大家喜闻乐见的年终盘点时刻啦,今天给大家盘点一下2015年Android开发领域新出现的10大热门开源项目.数据来自于GitHub搜索,创建时间自2015年1月1日开始的新项目 ...

  3. Android开源工具项目集合

    最近因为要去外派了,工欲善其事,必先利其器!所以又回顾了一下自己github上所收藏的项目,也算是温故而知新吧. 最流行的Android组件大全  http://www.open-open.com/l ...

  4. Android开源库项目集锦

    一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才开始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的所有平台, ...

  5. Android开源经典项目

    目前包括: Android开源项目第一篇--个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...

  6. 一些完整的Android开源app项目

    android开源项目有很多,但是完整的app项目不多,下面是最近我 整理的一些开源app项目: 注: jcodecraeer网站上搜集了很多开源项目,更新很快,非常值得关注. 一.photoup 介 ...

  7. [Android]Android开源工具项目集合20160523

    最流行的Android组件大全  http://www.open-open.com/lib/view/open1409108030307.html Android开源项目分类汇总  http://ww ...

  8. Android 开源优秀项目

    BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beautifu ...

  9. 十个经典Android开源APP项目

    Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个 ...

最新文章

  1. Java学习笔记(九)--数组及Arrays类
  2. 学习历史预测未来,国防科大新模型实现未来事实预测SOTA
  3. c语言创建学生成绩表,C语言创建信息链表,求助
  4. OpenStack —— DevStack一键自动化安装
  5. 常见排序之——插入排序
  6. 我的内核学习笔记2:platform设备模型
  7. [USACO12OPEN]书架Bookshelf
  8. 解决PCoIP连接View 5.0虚拟桌面超时断开导致无法再次登录的问题
  9. 蔡工RK系列Android驱动开发入门视频课程
  10. linux sata硬盘热交换,学员原创-杨欢最详细西数硬盘热交换流程
  11. HLW8012电能测量芯片使用记录
  12. 常用iOS的第三方框架
  13. WINDOWS 7、windows server 2008、VISTA激活排斥
  14. NDB Cluster基本操作
  15. 高等数学:第五章 定积分(4) 定积分的换元法
  16. 抓包工具fiddler
  17. Python VTK计算曲面的高斯曲率和平均曲率
  18. Semaphore自白:限流器用我就对了!
  19. 警惕!程序员万字揭露被空姐骗到香港做传销的来龙去脉!
  20. 【清华大学课程】曼昆-经济学原理笔记(全集)

热门文章

  1. 关于windows7打不开hlp文件的解决方法
  2. 程序员如何高效准备简历和面试04:技术简历应该怎么写、怎么投?
  3. 九宫格布局方式有哪些,有什么优缺点?
  4. 长达8.21万公里公路在青海高原延展 可绕地球赤道两周
  5. 《新概念英语3》大概相当于什么水平
  6. Checkra1n越狱发布日期确定,Pwn20越狱A12/A13芯片的越狱建议
  7. 开发者必备工具,一键生成接口文档、调用示例
  8. ​卜东波研究员:高观点下的少儿计算思维
  9. 【】时间提前,国服无限火力、乱斗2019体验服
  10. 如何简单粗暴的提升NER效果?一文告诉你如何用词库来做NER数据增强