用SmoothScroller实现RecyclerView滚动到指定位置并置顶

博客介绍了如何在RecyclerView中实现点击TabLayout时滚动到指定item并将其置顶。通常的方法包括使用scrollToPosition和smoothScrollToPosition,但这些方法可能无法确保item置顶。作者推荐了一种更简洁的方法,通过自定义LinearSmoothScroller并设置SNAP_TO_START参数,以在滚动到指定位置时自动置顶。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:最近遇到了一个点击TabLayout定位到RecyclerView对应item并置顶的需求。经查阅资料和自己看源码,找到了更好的解决方法,特在此记录以给遇到相似场景的同学们以参考。

RecyclerView滚动到指定位置并置顶

RecyclerView本身提供了几个定位的方法,除了手动滑动的scrollTo,smootScrollTo和scrollBy,smoothScrollBy方法之外,有一个直接滑动到指定位置item的scrollToPosition方法和另一个在此基础上平滑滚动的smoothScrollToPosition方法。
但是经实验,该方法只能保证指定位置的item滑动到屏幕可见,如果指定的item本来就已在屏幕可见范围,则不会滑动,并且屏幕外的item滑到可见范围后,还需手动置顶。

常见处理方式

看了网上大多数相关的博客,一般的处理都是将item区分为 在可见范围以上/在可见范围内/在可见范围以下 三种情况,分别进行处理。

  • item在第一个可见item之前,直接用smoothScrollToPosition,则当该item移动到可见范围时,它就在RecyclerView顶部
  • item在可见范围内,即在第一个可见item之后,最后一个可见item之前,那么这时scrollToPosition失效,需要手动计算该item的view距离顶部的距离,用scrollBy自行移动到置顶位置
  • item在最后一个可见item之后,用smoothScrollToPosition滑动到可见范围 (此时该item在最后一个位置),再获取该item的view,计算到顶部距离,再监听RecyclerView的滑动,对其进行二次滑动到顶部

贴上该方法主要的实现代码:

    //标记是否需要二次滑动
    private boolean shouldMove;
    //需要滑动到的item位置
    p
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值