android - 同时滚动两个视图
问题描述
首先是这个想法:我试图同时滚动两个视图。意味着,当您滚动第一个时,第二个将同时滚动。布局如下:
现实:我有两个列表,一个是水平的,另一个是垂直的。水平的包含类别列表,垂直的包含来自这些类别的图像。类别 1、类别 2 和类别 3 是 RecyclerView 的项目。RV1、RV2 和 RV3 是三个水平回收站视图。目前,我将这些“RV1、RV2 和 RV3”放在具有垂直 ScrollView 父级的垂直 LinearLayout 中。我不确定是否应该用recyclerview 替换这个linearlayout 和scrollview。但是这个想法保持不变,当用户滚动一个列表时,我需要滚动另一个列表。
更加具体
- 当我滚动类别水平列表并将“类别 2”置于最左侧位置时,垂直列表中的“RV 2”应位于最顶部位置。
- 如果我使用垂直列表,也会发生同样的情况。如果我将“RV 1”滚动到顶部,则“Category 1”也应该自动滚动并位于最左边的位置。
- “RV1、RV2 和 RV3”recyclerviews 可以自己水平滚动,这很好,这不是问题。
解决方案
您应该能够对所需的行为进行如下建模:
onScrollListener
向水平类别 RecyclerView添加一个。然后在里面,您可以使用或根据您的确切需求onScrolled
确定最左边的项目。(链接适用于 LinearLayoutManager,这主要是您在那里使用的)firstVisibleItemPosition
firstCompletelyVisibleItemPosition
注意:onScrolled
在用户完成滚动后调用,所以如果你需要实时滚动,你可以尝试在里面做类似的事情onScrollStateChanged
。
无论如何,您现在将拥有一个int
与最左侧类别的位置相对应的位置,该位置直接映射到需要被带到顶部的相应 RV 的位置。
我建议将您的ScrollView
和LinearLayout
组合切换到 RecyclerView,因为滚动到特定项目会更简单。您可以将之前检索到的索引传递给此垂直 RecyclerView 的smoothScrollToPosition
orscrollToPosition
方法,具体取决于内容应如何滚动。
您可以对垂直 RV 执行相同操作,以自动滚动类别。如果我没记错的话,程序scrollToPosition
调用并没有触发任何附加onScrollListener
的 s。如果这种情况发生了变化,那么您将必须确保它们不会不必要地相互滚动。
推荐阅读
- assembly - 带有 NASM 故障的 x86 汇编 VGA 图形?
- ruby-on-rails - 测试和部署工作流程 (Rails)
- javascript - 带有缩放过渡的图像幻灯片
- laravel - 配置 apache 后仍然在 Laravel 上收到 permison denied 消息
- java - Java中TreeSet的高度?
- css - 将 SCSS `@extends` 与深层元素样式一起使用
- python - Pyautogui 截图。它去哪儿了?以后如何保存和查找?
- php - 优化php控件结构
- google-app-maker - G Suite API 创建群组
- javascript - webpack 中的异步块是什么?