首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取滑动时Viewholder (RecyclerView)移动了多少像素

在RecyclerView中获取滑动时Viewholder移动了多少像素,可以通过以下步骤实现:

  1. 首先,你需要在RecyclerView的滑动监听器中获取滑动的距离。可以通过设置RecyclerView的OnScrollListener,并重写其onScrolled方法来实现。在onScrolled方法中,你可以获取到RecyclerView的滑动距离。
  2. 在onScrolled方法中,你可以通过RecyclerView的LayoutManager来获取可见的第一个和最后一个View的位置。可以使用LinearLayoutManager的findFirstVisibleItemPosition和findLastVisibleItemPosition方法来获取这些位置。
  3. 接下来,你可以通过RecyclerView的getChildAt方法获取到第一个可见的View,并使用getTop方法获取到该View的顶部位置。同样地,你可以获取到最后一个可见View的底部位置。
  4. 计算滑动的像素数,你可以使用第一个可见View的顶部位置减去RecyclerView的滑动距离,再加上最后一个可见View的底部位置。这样就可以得到Viewholder移动的像素数。

总结: 获取滑动时Viewholder移动了多少像素,可以通过监听RecyclerView的滑动事件,获取可见的第一个和最后一个View的位置,并计算它们的顶部和底部位置,从而得到Viewholder移动的像素数。

腾讯云相关产品推荐:

  • 云服务器(CVM):提供弹性计算能力,满足各类业务需求。详情请参考:云服务器产品介绍
  • 云数据库MySQL版(CDB):提供稳定可靠的数据库服务,支持高可用、备份恢复等功能。详情请参考:云数据库MySQL版产品介绍
  • 云存储(COS):提供安全可靠的对象存储服务,适用于图片、音视频、文档等各类文件的存储和管理。详情请参考:云存储产品介绍
  • 人工智能平台(AI Lab):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。详情请参考:人工智能平台产品介绍
  • 物联网开发平台(IoT Explorer):提供全面的物联网解决方案,支持设备接入、数据管理、规则引擎等功能。详情请参考:物联网开发平台产品介绍
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

首先需要明确,RecyclerView 的回收机制在工作,会先将移出屏幕的 ViewHolder 放进一级缓存中,当一级缓存空间已满,才会考虑将一级缓存中已有的 ViewHolder 移到 RecyclerViewPool...相反,当 Item 进屏幕内,另一个方法则会回调。 那么,其实,在一定场景下,可以通过这两个回调来处理一些 Item 移出屏幕,进屏幕所需要的工作。...当手指放开的时候,分两种情况,一是手指放开后 RecyclerView 又根据惯性滑动了一段距离,只要有稍微滑动就算,那么这个时候进入惯性滑动该方法会被回调,参数传入 SCROLL_STATE_SETTLING...另外一种情况是,手指放开后,RecyclerView 并没有任何滑动了,通常是手指很慢的拖动情况下放开,这时候该方法就会只回调一次,参数传入 SCROLL_STATE_IDLE,因为在手指还没放开前就已经停止滑动了...5.9 findViewHolderXXX() 既然 ViewHolder 携带着大量 Item 的相关信息,RecyclerView 自然也就提供了各种方式来获取 ViewHolder,这个系列的方法如下

3.1K60
  • 关于RecyclerView你知道的不知道的都在这了(下)目录正文

    回收复用的单位是 ViewHolder,至于 Item 移出屏幕是怎样回收,回收到哪里,Item 进屏幕是怎样复用,整个流程是先复用再回收,还是先回收再复用,还是两边同时进行等等一系列的工作都是交由...这样能达到的效果就是:当某个 Item 刚被移出屏幕外,下一步又立马进屏幕,此时并不会去触发到 Adapter 的 onBindXXX 的调用,也就是说,这一级缓存里的 ViewHolder 可直接...6.2 setViewCacheExtension() 当 Item 要被进屏幕,Recycler 会先去那些不需要重新调用 onBindViewHolder() 的缓存容器中寻找是否有可直接复用的...再比如,只希望翻页滑动,当手指滑动距离小于翻页,自动滑回原位进行翻页等等。...这些滑动策略其实就可以直接借助内置的两个类来实现:LinearSnapHelper 和 PagerSnapHelper ps:本来以为这种滑动策略也是支持由焦点触发的滑动行为的,最后测试才发现,原来只支持手指触摸式的滑动行为

    1.3K30

    再也不用担心面试官问RecycleView了

    ,包含数据和position信息,复用时必须是相同位置的ViewHolder才能复用,应用场景在那些需要来回滑动的列表中,当往回滑动,能直接复用ViewHolder数据,不需要重新bindView。...所以「完整缓存流程」是: 保存缓存流程: 插入或是删除itemView,先把屏幕内的ViewHolder保存至AttachedScrap中 滑动屏幕的时候,先消失的itemview会保存到CacheView...获取缓存流程: AttachedScrap中获取,通过pos匹配holder——>获取失败,从CacheView中获取,也是通过pos获取holder缓存 ——>获取失败,从自定义缓存中获取缓存——>获取失败...,从mRecyclerPool中获取 ——>获取失败,重新创建viewholder——createViewHolder并bindview。...它的定义就是支持嵌套滑动的ScrollView。 所以直接替换成Nestedscrollview就能保证两者都能正常滑动了

    1.5K20

    【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

    , ViewHolder viewHolder = mSelected; 其中 mSelected 是在第一次按下进行的赋值 , 有了 mSelected 值后 , 开始处理滑动事件 ; 如果没有获取到...viewHolder) // 方法的作用是设置 拖动幅度 // 组件在宽度 / 高度 上移动超过该比例 , 就认为拖动触发, 执行拖动相关操作 // 拖动多少系数 , 才算完成 拖动操作...@NonNull RecyclerView.ViewHolder target) 先获取拖动的起始位置和目标位置 , 然后传入 onMove 方法 , 触发回调 ; // 获取被拖动的目标位置...RecyclerView recyclerView, // @NonNull RecyclerView.ViewHolder viewHolder,...viewHolder) // 方法的作用是设置 拖动幅度 // 组件在宽度 / 高度 上移动超过该比例 , 就认为拖动触发, 执行拖动相关操作 // 拖动多少系数 , 才算完成 拖动操作

    1.2K20

    RecycleView三问—腾讯真题

    Recycleview相比也是每个Android开发者熟得不能再熟的控件了,但是你对他又真的了解多少呢?看看今天的三问你都能答得上来吗?...,包含数据和position信息,复用时必须是相同位置的ViewHolder才能复用,应用场景在那些需要来回滑动的列表中,当往回滑动,能直接复用ViewHolder数据,不需要重新bindView。...所以完整缓存流程是: 保存缓存流程: 插入或是删除itemView,先把屏幕内的ViewHolder保存至AttachedScrap中 滑动屏幕的时候,先消失的itemview会保存到CacheView...,从mRecyclerPool中获取 ——>获取失败,重新创建viewholder——createViewHolder并bindview。...这样就减少了创建VIewholder的开销。 在RecyclerView的元素比较高,一屏只能显示一个元素的时候,第一次滑动到第二个元素会卡顿。

    1.2K40

    Android魔术系列:一步步实现滑动折叠列表

    BottomViewHolder和ItemViewHolder继承同一个类,代码如下: abstract class ViewHolder extends RecyclerView.ViewHolder...这里之所以再加上10像素,是因为如果设置高度正好是余下的高度,当快速滑动到底部的时候有几率会出现问题,所以这里让高度略大于实际展示的高度。...其实当RecyclerView添加到屏幕上,是一定会产生滑动的。所以我们进入页面的时候,我们什么都没有操作,滑动监听的函数却被调用了。...总结一下 整个效果中其实没有太多难点,主要是考察了对RecyclerView滑动的理解。目前这个版本在快滑还有一个小问题。...除了RecyclerView这个版本,实际上这个效果还有一个ScrollView的版本。其实在ListView和RecyclerView上实现这个效果都多少有些问题。

    95010

    RecyclerView预加载!

    监听列表滚动状态 第一个想到的方案是监听列表滚动状态,当列表快滚动到底部执行预加载,RecyclerView.OnScrollListener提供了两个回调: public class RecyclerView...在正常滑动过程中,这个方案无法做到精准匹配预加载阈值,即无法实现只回调一次onPreload(),因为onScroll()是像素粒度的回调,而预加载要做的表项粒度的检测。...类型无关预加载 判断是否预加载的关键是获取表项索引,刚才通过layoutManager.findLastVisibleItemPosition()获取,其实饶了一大圈。...列表在被显示之前必然经历了onBindViewHolder(holder: ViewHolder, position: Int),该方法中就能轻松的获取表项索引,可以把刚才的判断逻辑移到RecyclerView.Adapter...当RecyclerView更换LayoutManager,也不需要修改代码。

    2.4K00

    我懵了,面试大厂被熟悉的App启动流程和RecycleView连环三问坑了...

    ,包含数据和position信息,复用时必须是相同位置的ViewHolder才能复用,应用场景在那些需要来回滑动的列表中,当往回滑动,能直接复用ViewHolder数据,不需要重新bindView。...所以完整缓存流程是: 保存缓存流程: 插入或是删除itemView,先把屏幕内的ViewHolder保存至AttachedScrap中 滑动屏幕的时候,先消失的itemview会保存到CacheView...,从mRecyclerPool中获取 ——>获取失败,重新创建viewholder——createViewHolder并bindview。...说说RecyclerView性能优化。 bindViewHolder方法是在UI线程进行的,此方法不能耗时操作,不然将会影响滑动流畅性。比如进行日期的格式化。...这样就减少了创建VIewholder的开销。 在RecyclerView的元素比较高,一屏只能显示一个元素的时候,第一次滑动到第二个元素会卡顿。

    3.1K00

    RecyclerView中监听EditText变化的BUG的解决方法

    简单来说,我们要的效果是手动修改editText才进行int – befour + now步骤,而现在你光滑动就莫名其妙进行int – 复用前item的数 + 复用后item的数。...那我们就需要解决一个问题,只有手动修改edittext,才进行正确的操作,滑动,不进行操作 其实我以前有说过reyclerview不能直接对它的容器进行操作(也就是viewholder),而应该对它的数据进行操作...所以你滑动发现befour 和now 会是一样,这时就不用进行更改总数的操作,而手动改变editTextbefour 和now 是不一样的。...在RecyclerView中,不管你要做什么操作,不要直接对容器(ViewHolder)操作,而是对数据进行操作。...补充一点java的常识 如果你传的是对象的话,这里对形参的改变,实参也会变,但是传基本数据类型的话,你变形参是不会影响实参的,所以不管有多少个数据,在viewholder中最后应该传入对象而不是基本数据类型

    1.6K20

    Android自定义控件进阶:自定义LayoutManager

    RecyclerView的重要性不必多说,据过往开发经验而谈,超过一屏可滑动的界面,基本都可以采用 「RecyclerView的多类型」 来做,不仅维护还是扩展都是非常有效率的。...两种情况,在 mHorizontalOffset 小于 firstChildCompleteScrollLength 情况下,用该偏移量除以 firstChildCompleteScrollLength 获取到已经滚动了的百分比...childWidth = getDecoratedMeasurementHorizontal(tempView); } // 修正第一个可见view mFirstVisiPos 已经滑动了多少个完整的...onceCompleteScrollLength就代表滑动了多少个item firstChildCompleteScrollLength = getWidth() / 2 + childWidth...*/ private void recycleChildren(RecyclerView.Recycler recycler) { List<RecyclerView.ViewHolder

    2.1K00

    Android-WItemTouchHelperPlus几行代码搞定仿QQ侧滑

    它允许您控制每个ViewHolder都启用了哪些触摸行为,并且在user执行这些操作也会接收回调 .通俗来说就是我们可以再这个类里面去控制我们想要的触摸效果,也就是侧滑还是拖拽.然后可以得到动作执行中的回调...onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float...recyclerView, RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder...滑动的距离为RecyclerView的宽度,往往就是屏幕的宽度. 限制滑动距离之后,无法正常恢复侧滑(让滑动的View复位)....三 改进版的WItemTouchHelperPlus 新增了一个接口Extension用来获取我们侧滑的距离,需要在获取侧滑控件的地方去实现该接口,因为再ItemTouchHelper里面我们操作的是ViewHolder

    39010
    领券