动画RecyclerView高度

时间:2015-09-30 23:01:06

标签: android animation android-recyclerview

是否可以为RecyclerView高度设置动画,或者以编程方式更改它?例如,如果我有一个有时可见的大标题视图,有时则不可见 - 我想在动画标题时为RecyclerView高度设置动画以填充屏幕。

更改LayoutParams.height似乎不起作用。 LinearLayout animateLayoutChanges导致崩溃。

<LinearLayout>
   <RelativeLayout (header)>
   <RecyclerView>
</LinearLayout>

我想让RelativeLayout动画出顶部(translationY),然后同时使recyclerview动画更高,以适应。

1 个答案:

答案 0 :(得分:1)

有可能选择解决这个问题:

  1. 按照@Ari的建议开始动画和每个动画刻度更新布局参数。这将使recyclerview的效果改变其大小。然而,从表现角度来看,这是一个可怕的想法。布局和测量过程非常昂贵,因此通常您希望最小化触发布局的调用。致电setLayoutParams将触发布局&amp;测量RecyclerView +所有孩子的流程,这意味着在每一帧上你都会做一些非常昂贵的工作,这很可能会导致陷害和糟糕的用户体验

  2. 还有另外一种方法。它可能不适用于所有情况 - 这一切都取决于你的最终布局,但仍然是我建议做的。想法 - 在开始动画之前让您的recyclerView更高。它需要一些先进的Android技能。基本上你需要覆盖onMeasure&amp;您的RecyclerView中的layout方法(您实际上需要扩展RecyclerView类来执行此操作)。

    • 您可以向您的recyclerView引入一些标记,以测量自己比正常高一点(高多少 - 标题视图的确切高度)
    • 当您需要为标题设置动画时 - 将您的标记设置为true并请求新的布局。这将重新布局recyclelerView,底部有一些看不见的部分。
    • 现在,您可以为RecyclerView&amp;的翻译设置动画。标题使标题移出屏幕并且recyclerview更高。这将使用户感觉像recyclerview“扩展”
    • 动画完成后 - 将自定义标记设置为false,并将标题的可见性更改为GONE,因为它现在不在屏幕上
  3. 以下是有关实现自定义onMeasure逻辑的一些信息: https://medium.com/android-news/perfmatters-introduction-to-custom-viewgroups-to-improve-performance-part-2-f14fbcd47c