【问题标题】:MotionLayout collapses RecyclerView header but does not expandMotionLayout 折叠 RecyclerView 标头但不展开
【发布时间】:2021-04-23 10:10:49
【问题描述】:

我创建了一个sample project 可以重现此问题。

预期结果

  • 当我向上滚动底部 RecyclerView 时,顶部 RecyclerView 折叠
  • 当我向下滚动底部 RecyclerView 时,顶部 RecyclerView 展开

观察结果

  • 当我向下滚动底部 RecyclerView 时,顶部 RecyclerView 不会展开

附加信息

  • 当顶部 RecyclerView 折叠到一半时,尝试按住滑动,然后向下滑动。您可以看到顶部项目的一半被切割。
  • 这只发生在折叠视图是/包含 RecyclerView 的情况下。

GIF

(忽略颜色的变化 - 这只是压缩 GIF 的结果)

问题

我做错了什么还是 MotionLayout 错误?

【问题讨论】:

    标签: android android-recyclerview android-motionlayout


    【解决方案1】:

    我想出了一个替代解决方案。

    为了方便交流,我将rvTop 用于顶部的 RecyclerView,rvBottom 用于底部的 RecyclerView。

    我们的想法是“隐藏”它,而不是“缩小”rvTop。

    所以我们需要在它们之间引入一条新的不可见线,而不是让 rvBottom 约束到 rvTop 的底部,并使用 MotionLayout 使这条不可见线向上动画,同时保持 rvTop 的 alpha 变化。

    为了做到这一点,我们必须使 rvBottom 不透明,否则它会与褪色的 rvTop 重叠。

    我已更新sample project 中的代码以演示更改。

    而效果是:

    编辑:

    另一种选择是在转换后移除 rvTop 对父级顶部的约束。

    是的,这将使它简单地与 rvBottom 一起滚动;但我们可以添加一点translationY 使其“滚动速度比 rvBottom 慢”。

    这可以处理无法使 rvBottom 不透明的情况,例如页面本身使用渐变背景。

    效果如下:

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 2019-04-13
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多