一、今日总结和明日规划(与手势冲突无关,不感兴趣的直接看后面)
大家好,今天又是充实的一天,改了插入文案的脚本,核对文案,这是基本的工作完成
在此基础上,毕设有重大进展:
更新push_history
1.5.0_H包发布
优化音频播放进度条展示
fix:noteBook空指针闪退bug
fix:recycleView滑动卡顿以及位置变换
fix:recyclerView会突然再次排序
fix:图片添加Dialog出两次
fix:ViewPager2与内部的recycleView的滑动冲突(巨难):https://juejin.cn/post/6886037403413250062
回退禁止滑动(前辈写的也有滑动冲突,尝试解决)
fix:select空指针crash
核心是解决了ViewPager2与RecyclerView的滑动冲突,今天也着重讲它,到底什么是滑动冲突?怎么解决它,我会讲出我的理解,我认为我都可以理解,你也一定可以理解!
那么首先规划明天:
明日计划:
1.尝试修复ViewPager2与recycleView的滑动冲突
2.看FeedBack生成日志的逻辑
3.尝试实现生成trcak的Log
二、什么是滑动冲突,什么时手势冲突?
好的,回归正题,现在开始介绍今天的核心:滑动冲突和手势冲突
顾名思义,前者就是滑动导致的,后者就是手势导致的
你可能会觉得我在放屁,不错,这样解释显然是啥子行为,按么老规矩,先带大家问下gpt:
看了gpt,是不是有种看课本定义的感觉,不过其实我感觉还好,可以看懂,那么我再补充解释一下:
直接看图:
还有更简单的,你打开你的qq,首页展示了你的最近聊天,你会发现左滑某一个记录,会出现置顶、标为已读,删除,对吧
但是你注意一下,最下面是不是有5个item:
那么很简单,当你在左滑item时,下面的选中变换了,比如你左滑了,选中的消息item被切换为了频道,那么这就是滑动冲突,你可能会问我哎他怎么不会这样?
我的评价是如果它存在滑动冲突,QQ的开发吃什么的?
而且他不一定是ViewPager+RecycleView,只是我看这是这样,谁也不知道腾讯具体怎么实现的
那么手势冲突呢,更简单,就是你本来想往下滑首页的消息,结果被切到了频道栏
简单不,其实没这么简单,我只是讲了几个特例,你可能会遇到更复杂的滑动冲突,还有其他种类的,我只是向你传输这种概念,那么接下来就讲一下怎么解决滑动冲突和手势冲突
三、如何解决滑动冲突
滑动冲突有很多,网上有很多针对不同的滑动冲突有不同的解决方案,主要是外部拦截和内部拦截
这当然不是我想出来的,这是前人的经验
外部拦截法就是重写父容器的事件拦截方法,内部拦截法 主要重写子容器的事件分发方法和父容器的事件拦截方法
是不是有点蒙,不知道是啥,不错,如果你是第一次看,你肯定看不懂,那么我来放个图来介绍事件分发的逻辑:
(图来自:Android事件分发机制详解:史上最全面、最易懂 - 简书)
是不是很懵,我来一讲你就明白了:(下面是我的理解)
Android下,用户是用手指来与手机交互的
比如你点了一下QQ的图标,QQ被打开了。这叫点击事件
你在QQ首页滑动了一下手指,你的QQ记录往下滑动了。这叫滑动事件
你长按录音键,QQ开始录音。这叫长按事件
你松开手指,停止录音,你说的话被发了出去。这叫松开事件
你打王者荣耀,左手控制方向,右手按技能和普攻,这叫多指触摸
有没有感觉,好神奇呀,app能识别这么多手势
可是你稍微想一想,如果真的可以识别这么多手势,他的底层会不会很复杂
举个很简单的例子,我们的电脑可以实现各种网络访问,图片加载等等,但是他底层只是01的二进制码
那么在Android中,我上面的这些事件(其实如果按我这么分,能分很多),底层是什么
不错,底层就是手指触摸,不过他不会识别这么多(不过它识别的确实也不少)
其实如果你去看文档,下面还有很多,但是实际上最常用到的只有几种:
(图来自欧阳老师的AndroidStudio从零基础到App上线)
那么顺便看下欧阳老师对事件分发的总结图:
那么,我就参照这个图来解释下事件的分发:
不过光看这个你可能很懵,我就配一张我的毕设的Layout Inspector:
比如你现在按了一下这个波浪形的图片(其实是我毕设的音频播放按键)
那么会发生以下事件:
app感受到了你的触摸,它的坐标就是你按下的坐标
然后app把这个触摸事件,Motion.DOWN传给了最外面的布局,也就是下面图中的LinearLayout
然后LinearLayout识别这个坐标是在它的ViewPager范围内
同理ViewPager识别到他在fragmentr内,fragment识别到是在recycleView内
recycleView识别到imageView内
你的一次触摸就这样穿到了最下面
然后触发的逻辑是从下往上传递,也就是上面图中的View向上走,最后走到线性布局
怎么样,这样一解释是不是豁然开朗,搞懂了原理,剩下的就简单了,不过篇幅有限,剩下的明天分享