2024年Android最新抖音Android端“个人中心”页滑动冲突优化方案(1),2024年最新在线面试技巧

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

分析


问题明确了,接下来就是分析是如何产生的了。我这边通过综合分析发现,抖音这边用的是自定义LinearLayout的方式来布局header + Viewpager + RecyclerView的,进而通过拦截LinearLayout的disptachTouchEvent 来处理的嵌套滑动。整体的滑动流程如图所示:

  1. 当手指触摸屏幕时,记录位置,滑动后,判断是横向竖向,只判断一次

  2. 如果是上下滑动,则判断是触发最外层LinearLayout的滑动,还是触发RecyclerView的自身滑动。

  3. 触发自身的滑动就是调用自己的scrollBy(0,dy),注意 此时的事件还是会往下传递到 RecyclerView,但是由于相对于RecyclerView自身来说滑动差值很小,视觉上可忽略。

  4. 不触发自身的滑动就会直接分发下去,此时RecyclerView自身来说竖向(dy)差值变化较大,正常滑动。

  5. 出现问题时,用户的手先触发左右滑动,这时候由于RecyclerView父布局ViewPager中的一些临界判断没被触发,所以没拦截事件,事件还是到了RecyclerView中,此时如果再次上下滑动,由于1中的判断单次滑动周期内只触发了一次,还被认为是左右滑动事件,所以LinearLayout布局本身没有滚动,但是RecyclerView正常响应滚动,导致的出现滑动偏差。

优化方案


问题分析的差不多了,其实本来也就结束了,但是惊喜的发现原来这个自定义的滑动布局是扩展自开源库:github.com/cpoopc/Scro… 但是已经长时间没人维护了。不过通过这个原始的库。可以看到核心逻辑还是一致的,经过调试编译发现,确实这个库也同样存在这个问题,那就基于此库着手试着解决一下吧。

库的原来的代码如图:

根据分析就是在图中else中其实又触发了上下滑动逻辑,而外层的自定义LinearLayout布局没有跟随滑动导致的。那我们是不是可以在里面加个判断,除去真正的左右滑动逻辑(ViewPager事件),剩下的事件就是触发RecylcerView滑动的了(相当于过滤了横向的,留下的竖向的),我们再次判断外层的自定义LinearLayout布局是否需要联动,如果需要再次联动就好了。

站在巨人肩膀上,系统控件的处理一般都可以借鉴,源码之下,一切清晰,横向的可以参考ViewPager的事件拦截,竖向的可以参考RecyclerView的事件处理逻辑。分析两个控件的onIntercepetTouchEvent(),拿到其核心的判断是否响应滑动的逻辑,为我们所用。

ViewPager相关源码如图:

核心拦截逻辑:

1.如果横向上有可滑动的子View,就不拦截,让子View去处理

2.横向的滑动超过临界值mTouchSlop,并且大于竖向滑动距离的2倍,进行拦截

我们需要把相关的判断代码都copy过来,然后加入到我们自定义LinearLayout中

此时进行Log调试发现还是有问题…… 原来ViewPager中判断了是否是子View消费事件,这里我们不能照搬过来,我们要取反,即如果当前自定义的LinearLayout中有横向可滑动的View,我们的isHorizontalDrag方法应该返回true

修改后的如图:

到此横向判断的过滤条件写好了。下面看竖向的RecyclerView的拦截代码,其实非常简单:

小福利:

在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021大厂最新Android面试真题解析

Android大厂面试真题解析

各个模块学习视频:如数据结构与算法

算法与数据结构资料图

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
一线互联网架构师

这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值