【问题标题】:Scroll two Views at the same time同时滚动两个视图
【发布时间】:2018-10-10 14:15:38
【问题描述】:

想法第一:我试图同时滚动两个视图。意味着,当您滚动第一个时,第二个将同时滚动。布局如下:

现实:我有两个列表,一个是水平的,另一个是垂直的。水平的包含类别列表,垂直的包含来自这些类别的图像。类别 1、类别 2 和类别 3 是 RecyclerView 的项目。 RV1、RV2 和 RV3 是三个水平回收站视图。目前,我将这些“RV1、RV2 和 RV3”放在具有垂直 ScrollView 父级的垂直 LinearLayout 中。我不确定是否应该用recyclerview 替换这个linearlayout 和scrollview。但是这个想法是一样的,当用户滚动一个列表时,我需要滚动另一个列表。

更具体

  1. 当我滚动类别水平列表并将“类别 2”置于最左侧位置时,垂直列表中的“RV 2”应位于最顶部位置。
  2. 如果我使用垂直列表,也会发生同样的情况。如果我将“RV 1”滚动到顶部,“Category 1”也应该会自动滚动并位于最左侧。
  3. “RV1、RV2 和 RV3”recyclerviews 可以自行水平滚动,这很好,这不是问题。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    您应该能够对所需的行为进行如下建模:

    onScrollListener 添加到水平类别RecyclerView。然后在onScrolled 中,您可以根据您的具体需要使用firstVisibleItemPositionfirstCompletelyVisibleItemPosition 确定最左边的项目。 (链接适用于 LinearLayoutManager,这主要是您在那里使用的)

    注意onScrolled 在用户完成滚动后调用,因此如果您需要实时滚动,您可以尝试在onScrollStateChanged 中执行类似操作。

    无论如何,您现在将拥有一个与最左侧类别的位置相对应的int,它直接映射到需要被置于顶部的相应 RV 的位置。

    我建议您将 ScrollViewLinearLayout 组合切换到 RecyclerView,因为滚动到特定项目会更简单。您可以将之前检索到的索引传递给此垂直 RecyclerView 的 smoothScrollToPositionscrollToPosition 方法,具体取决于内容的滚动方式。

    您可以对垂直 RV 执行相同操作,以自动滚动类别。如果我没记错的话,程序化的scrollToPosition 调用并没有触发任何附加的onScrollListeners。如果这种情况发生了变化,那么您将必须确保它们不会不必要地相互滚动。

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 2016-07-25
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      相关资源
      最近更新 更多