当前位置: 首页 > 知识库问答 >
问题:

滚动Android RecycerView并控制屏幕上的准确位置

尉迟京
2023-03-14

我试过:

smoothScrollToPosition(targetPosition)

它的滚动速度很慢(我还可以通过扩展LinearLayoutManager和重写calculateSpeedPerPixel()来控制速度--参见如何控制RecolyerView.SmoothScrollToposition(position)的滚动速度),但是我无法控制滚动后列表项在屏幕上的确切位置。我只知道它会在屏幕上完全可见。

我试过:

scrollToX(0, targetPosition * itemHeight - screenHeight / 2)

共有1个答案

姜玮
2023-03-14

您可以根据实际目标位置和可见项的数量来计算SmoothScrollToposition的targetPosition。

一个关于如何做到这一点的快速POC:

  val scrollToPosition = 50

  val layoutManager = recyclerView.layoutManager as LinearLayoutManager
  val firstPosition = layoutManager.findFirstVisibleItemPosition()
  val lastPosition = layoutManager.findLastVisibleItemPosition()
  val visibleItems =  lastPosition - firstPosition + 1

  if (firstPosition < scrollToPosition) {
      recyclerView.smoothScrollToPosition(scrollToPosition + (visibleItems / 2))
  } else {
      recyclerView.smoothScrollToPosition(scrollToPosition - (visibleItems / 2))
  }

如果您想要更精确的结果,即项目应该正好在屏幕的中间,您可以使用项目的高度(因为它是固定的)和RecyclerView的高度,然后计算滚动的偏移量。并呼叫:

recyclerView.scrollBy(dx, dy)
recyclerView.smoothScrollBy(dx, dy)
 类似资料:
  • 问题内容: 我敢肯定这是可能的,但是我所有的搜索都空白了。 在Java中,是否可以在Java应用程序之外注册鼠标移动事件?因此,如果鼠标指针移动到屏幕上的任何地方,我都会回电。轮询可能是近似值,但必须有更好的方法。 谢谢 解释用例:它仅用于一个宠物项目,但是基本上是当鼠标击中屏幕边缘时触发事件。我还认为,如果您尝试 超越 屏幕边缘,可能会触发其他事件。为此,我认为鼠标运动侦听器可能更合适。 问题答

  • 问题内容: 我有一个div,当我的页面首次加载时,它离顶部约100像素(该页面包含一些按钮等)。 当用户滚动通过它时,我希望div“关注”该用户,因为它附着在屏幕顶部。当用户返回页面顶部时,我希望它返回到其原始位置。 问题答案: 诀窍是您必须将其设置为position:fixed,但仅在用户滚动经过它之后才能设置。 可以通过将处理程序附加到window.scroll事件来完成此操作 当页面滚动经过

  • 我是swift和Xcode新手,我想知道是否有人愿意向我解释,我应该如何让我的启动屏幕显示3秒钟,然后在这段时间内稍微淡出? 我想做一个我以前构建的网页的web视图,但希望它在启动屏幕之前淡出。 我已经阅读了所有其他与该主题相关的问题,但我不理解它们。我也一直在关注一些关于这个主题的教程,但什么都没有。 有人吗,拜托?

  • 本文向大家介绍在vue中实现禁止屏幕滚动,禁止屏幕滑动,包括了在vue中实现禁止屏幕滚动,禁止屏幕滑动的使用技巧和注意事项,需要的朋友参考一下 今天写了一个Vue弹层组件,用来全屏查看图片的,大概是下面这么一个效果: 其中背景是透明色的,但是弹出这个组件时手指滑动、鼠标滚轮滑动,底部页面是会动。 作为自己开发的一个常用的组件,这种bug当然是要解决的。 于是学艺不精的我在网上找了蛮久的,看了不少博

  • 更新 引用:perfecto mobile和device 我正在研究一个基于云的移动测试解决方案,应该支持iOS和Android。它要求连接的移动设备从浏览器处理。 我了解到移动设备有一种代理程序(它要求设备根植)安装, 将移动屏幕流到浏览器 并注入事件 有没有其他方法可以在不破坏设备的情况下实现这一点? 任何指针都是赞赏的。 更新1: 这个问题接近我正在寻找的。 更新2:我已经为Android设

  • 本文向大家介绍Flutter 控制屏幕旋转的实现,包括了Flutter 控制屏幕旋转的实现的使用技巧和注意事项,需要的朋友参考一下 最近需要做个平板的项目,然后需要直接横屏,有2种实现方式。 1, 随着屏幕旋转,布局自动调整。做横竖屏适配 2,强制屏幕横屏,不随着屏幕去调整 第一种方式这里就不做说明了。代码做适配就可以。 下面说一下第二种实现方式 Flutter 自带方式 flutter 为我们提