同时滚动两个视图

时间:2018-10-10 14:15:38

标签: android android-recyclerview

第一个想法:我正在尝试同时滚动两个视图。意思是,当您滚动第一个时,第二个将同时滚动。布局如下:

enter image description here

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

更具体

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

1 个答案:

答案 0 :(得分:1)

您应该能够按照以下所示对所需行为进行建模:

onScrollListener添加到水平类别RecyclerView。然后在onScrolled内部,您可以根据自己的确切需求,使用firstVisibleItemPositionfirstCompletelyVisibleItemPosition确定最左边的项目。 (链接用于LinearLayoutManager,这主要是您在此处使用的内容)

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

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

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

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