这就是 RecyclerView 嵌套滑动顶部项目

发布于:2024-10-24 编辑:匿名 来源:网络

RecyclerView嵌套滑顶项目应该说是很糟糕,但是如果项目确实需要这样的结构应用到首页上,想要找到成熟的解决方案并不容易。 。

本文给出了稳定运行半年多的嵌套滑动代码。代码地址:ByRecyclerView/stickyrv 渲染体验地址 fir.im 下载项目源码 半年前接到的任务,需要把首页改成和天猫或者京东一样。

现在看来,滑到顶部已经是标配了。我之前在网上看到过。

类似的文章还有很多,应该不难找到。然而我搜遍了几乎所有的文章和项目,基本上都无法使用。

存在卡住的错误。我问作者是否已应用到项目中,但没有回复。

原本以为之前的滑动顶部会以CoordinatorLayout+TabLayout+RecyclerView的形式来处理,但是感觉不合适。我用uiautomatorviewer分析发现天猫/京东/网易考拉所有app的首页都是RecyclerView-ViewPager-RecyclerView的形式,然后继续搜索找到了最接近的项目xmuSistone/PersistentRecyclerView。

这应该是我找到的最完整的代码了。应用到实际项目中后,发现仍然存在问题: 1、在华为设备上滑动子RecyclerView时会出现跳转。

2、父RecyclerView使用SmartRefreshLayout进行下拉刷新。有问题,也有回应。

卡顿 3. Sub-RecyclerView 加载较多,需要处理 4. Sub-RecyclerView 嵌套横向 RecyclerView 滑动冲突问题 5. Android 4.4 惯性滑动崩溃问题 当然,滚轮并不能完美契合项目的需求,所以有些上面修改了代码。改进1.在华为设备上,滑动子RecyclerView时出现跳转问题。

我在几位作者写的滑动到顶部的代码中发现了它。在其他手机上是没有问题的。

原因是华为设备非常敏感,手指放置时无法移动。很容易在ChildRecyclerView中触发parent.requestDisallowInterceptTouchEvent(false),并将事件抛给ParentRecyclerView,造成卡顿。

处理方法是在dispatchTouchEvent中如果垂直滑动距离超过24f则抛给ParentRecyclerView。具体代码: 代码语言: javascript copy override fun dispatchTouchEvent(e: MotionEvent): Boolean { val x = e.rawX val y = e.rawY when (e.action) { MotionEvent.ACTION_DOWN -> { //按下时的坐标storage downX = x downY = y // true表示ParentRecyclerView不拦截parent.requestDisallowInterceptTouchEvent(true) } MotionEvent.ACTION_MOVE -> { //获取距离差 val dx: Float = x - downX val dy: Float = y - downY // 通过距离差确定方向 valorientation = getOrientation(dx, dy) vallocation = intArrayOf(0, 0) getLocationOnScreen(location) when (orientation) { "d" -> if (canScrollVertically(-1)) { // 让ParentRecyclerView在可以下滑的时候不拦截parent.requestDisallowInterceptTouchEvent(true) } else { //当内部RecyclerView下拉到顶部时 if(dy < 24f){// 如果滑动距离小于这个值,Parent仍然不会拦截parent.requestDisallowInterceptTouchEvent(true) }else{ // 向Parent抛出滑动事件,使其可以随着Parent滑动parent.requestDisallowInterceptTouchEvent(false) ) } } "u" -> { // 向上滑动时,始终由ChildRecyclerView处理parent.requestDisallowInterceptTouchEvent(true) } } } } return super.dispatchTouchEvent(e)}private fun getOrientation(dx: Float, dy: Float ): String { return if (Math .abs(dx) > Math.abs(dy)) { //X轴移动 if (dx > 0) "r" else "l" //右、左} else { / /Y轴移动 if (dy > 0 ) "d" else "u" //Down//Up}} 2.解决下拉刷新/上拉加载问题(问题2/3)因为我花了一个之前花了不少功夫写ByRecyclerView,支持下拉刷新和上拉加载。

,其本质是在Adapter中添加一个特殊的viewType进行处理,这样就带来了更好的兼容性,所以BaseRecyclerView继承了ByRecyclerView。已满足要求。

只需要分别为ParentRecyclerView和ChildRecyclerView添加下拉刷新和上拉加载监听即可: 代码语言:javascript copy ParentRecyclerView.setOnRefreshListener { }childRecyclerView.setOnLoadMoreListener { } 3.子RecyclerView中的item水平嵌套 RecyclerView 这部分滑动冲突问题比嵌套top处理简单很多: 代码语言:javascript copy override fundispatchTouchEvent(e: MotionEvent): Boolean { val x = e.rawX val y = e.rawY when (e.action ) { MotionEvent.ACTION_DOWN - > { downX = x downY = y } MotionEvent.ACTION_MOVE -> { // 获取距离差 val dx: Float = x - downX val dy: Float = y - downY // 通过距离差确定方向 valorientation = getOrientation (dx, dy) val location = intArrayOf(0, 0) getLocationOnScreen(location) when (orientation) { // 上下滑动时扔给ChildRecyclerView处理 "d" ->parent.requestDisallowInterceptTouchEvent(false) "u" -> 父.requestDisallowInterceptTouchEvent(false) "r" -> { if (canScrollVertically(-1)) { // 当可以向右滑动时,自己处理。内部可以左右滑动parent.requestDisallowInterceptTouchEvent(true) } else { // 当你右滑到顶部的时候,交给parent来处理,这样就可以滑动到ViewPager的下一个位置了parent.requestDisallowInterceptTouchEvent(false) } } "l" -> { if (canScrollVertically(-1)) {parent.requestDisallowInterceptTouchEvent(true) } else {parent.requestDisallowInterceptTouchEvent (false) } } } } } return super.dispatchTouchEvent(e)} 4. Android 4.4 之后网上发布了惯性滑动崩溃问题,发现Android 4.4手机惯性滑动停止后肯定会崩溃。

具体原因是API 21中添加了onNestedScrollAccepted(),在较低的API级别中不能使用它,因为由于使用这个版本的人很少,所以我们做了一个粗略的工作:代码语言:javascript copy override fun onNestedPreFling(target: View,velocityX:Float,velocityY:Float):Boolean { try { if (android.os.Build .VERSION .SDK_INT <= 19) { return true } return super.onNestedPreFling(target,velocityX,velocityY) } catch (e: Exception) { return true } } 总结 本项目是在PersistentRecyclerView中开发修改的,解决了一些问题顿兼容性问题并增加了下拉刷新和上拉加载功能,并且经过一段时间的大规模使用,已经基本稳定,使用起来更加方便。项目代码放在ByRecyclerView/stickyrv中,因为不是必须的功能,所以没有放置library,如果需要使用的话,自己复制代码即可。

如果您有任何疑问,请提出问题。再次感谢作者的开源精神。

这就是 RecyclerView 嵌套滑动顶部项目

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 探索医疗人工智能的深水区!依图医疗向世界展示中国医疗人工智能成果

    探索医疗人工智能的深水区!依图医疗向世界展示中国医疗人工智能成果

    8月29日至31日,被誉为“人工智能行业奥林匹克”的世界人工智能大会在上海举行。 此次大会预计将汇聚来自全球40多个国家的超过40,000名嘉宾和超过200,000家参展商。 全球顶尖人工智能厂商将齐聚一堂,就自动驾驶、医疗人工智能、5G技术等热点话题进行交流分享。 作为中国医疗

    06-18

  • 乐奥医疗完成新一轮融资超亿元,它已布局三大领域并开创了多种医疗设备,

    乐奥医疗完成新一轮融资超亿元,它已布局三大领域并开创了多种医疗设备,

    高值耗材研发生产企业乐奥医疗近日宣布完成新一轮过亿元融资。 由中金资本中金启辰基金、山澜资本投资。 本轮融资将用于临床创新型外周血管产品及胃肠内镜介入高值耗材的营销。

    06-17

  • 无人零售柜台“茶时光”完成近千万元天使轮融资

    无人零售柜台“茶时光”完成近千万元天使轮融资

    据投资界2月6日消息,无人零售柜台“茶时光”完成近千万元天使轮融资近千万元。 投资方尚未透露,本轮融资将用于销售渠道拓展、人才引进和人工智能方面的研究。   据了解,Tea Time的第一代产品是无人零售货架。 通过市场测试,吴昊阳发现无人货架货损率不可控是盈利的难点

    06-18

  • “中国零售女王”选择不退休

    “中国零售女王”选择不退休

    既不是二代接班,也不是行业大佬式接班。 中国唯一一家在中南海开设门店的领先零售连锁企业红旗连锁正式宣布易手。 12月20日晚间,公司发布公告称,四川商投投资有限公司(上海商投)受让曹世如家族及第二股东永辉超市16.91%股权。 曹氏家族父子还将全部投票权转让给商投,四

    06-18

  • 思科2022财年第二季度营收同比增长6%,净利润同比增长17%

    思科2022财年第二季度营收同比增长6%,净利润同比增长17%

    思科发布第二财季财报。 本财季,思科净营收30亿美元,同比增长6%;净利润30亿美元,同比增长17%;调整后净利润35亿美元,同比增长6%。 思科季度业绩超出华尔街分析师预期,下一季度利润前景符合预期。

    06-17

  • 风雷科技完成过亿元A轮融资,高瓴创投、鼎晖百富纷纷出手

    风雷科技完成过亿元A轮融资,高瓴创投、鼎晖百富纷纷出手

    投资圈(ID:pedaily)据8月28日消息,上海风雷信息科技有限公司(以下简称风雷信息科技有限公司)风雷科技(简称“风雷科技”)今日宣布完成过亿元A轮融资,本轮融资由高瓴创投(GL Ventures)、鼎晖百富等国内知名机构投资,老股东通高资本风雷科技成立于2007年,是一家专注

    06-18

  • 与小编一起观看InnoSpace 2015春季DemoDay

    与小编一起观看InnoSpace 2015春季DemoDay

    7月10日,上海创业孵化器InnoSpace在创智天地举办了第四届国际创业训练营项目Demo Day活动。 此次活动吸引了包括知名投资人、创业媒体、创业导师、创业者在内的众多观众。 10个初创项目一一亮相,并进行了精彩的项目路演。 本期路演项目涵盖在线教育、在线旅游、互联网金融、

    06-18

  • 募集资金概要 - 12月总结【1231最新更新】

    募集资金概要 - 12月总结【1231最新更新】

    【新闻动态】中国电子科研投资基金投资微视觉传感,布局MEMS光通信和智能制造领域 【新闻动态】中国电子科研投资基金投资金亿新材料,加强关键电子材料布局成果转化引导基金出资300亿,出资100亿子基金规模50亿,江西金融投资产业发展母基金正式启动【动态】温氏股份累计出资

    06-18

  • 【融资24小时】2022年4月19日投融资事件汇总及明细

    【融资24小时】2022年4月19日投融资事件汇总及明细

    今日国内市场共发生投资披露事件32起,其中先进制造7起(葑新能源、盈盈)吉鑫、深渊蓝色航天、厚墨智能、万众易信、天方科技、苏电霸),企业服务5起(iVX、云加速、极邦科技、朗景科技、来也科技),汽车交通4(华建新能源、经纬恒润、吉能科技、拖车帮)、传统制造案例4个

    06-17

  • Apple Watch初体验:运动与健康

    Apple Watch初体验:运动与健康

    上周五,苹果官网推出了Apple Watch销售预订。 苹果直营店也首次展示Apple Watch真机,并接受现场消费者申请试戴体验。 尽管各方声音都认为Apple Watch无法超越iPhone的成功,但从试用场景以及苹果官网展示的数据来看,Apple Watch无疑是今年最受欢迎的智能硬件产品。 从现场

    06-18

  • “赛迈测控”完成数千万元Pre-A轮融资,由亿达资本

    “赛迈测控”完成数千万元Pre-A轮融资,由亿达资本

    投资界(ID:pedaily)领投 12月27日消息,近日,苏州赛迈测控技术有限公司赛麦测控股份有限公司(简称:赛麦测控)宣布完成数千万元Pre-A轮融资。 本轮融资由亿达资本领投。 据了解,本轮融资将用于核心测试测量模块、射频测试系统等产品的开发和应用。 赛迈测控成立于今年2

    06-18

  • NAND闪存芯片市场“入龙”

    NAND闪存芯片市场“入龙”

    近日,据外媒报道,三星电子将对其位于西安的芯片工厂投资80亿美元(约合人民币1亿元),扩建NAND闪存芯片生产能力。 据了解,本次投资是三星西安闪存芯片项目的二期项目。 此前已完成一期投资1亿美元。 二期项目已完成一期投资约70亿美元,目前正进入二期建设。 二期工程预计

    06-08