是否可以为RecyclerView高度设置动画,或者以编程方式更改它?例如,如果我有一个有时可见的大标题视图,有时则不可见 - 我想在动画标题时为RecyclerView高度设置动画以填充屏幕。
更改LayoutParams.height似乎不起作用。 LinearLayout animateLayoutChanges导致崩溃。
<LinearLayout>
<RelativeLayout (header)>
<RecyclerView>
</LinearLayout>
我想让RelativeLayout动画出顶部(translationY),然后同时使recyclerview动画更高,以适应。
答案 0 :(得分:1)
有可能选择解决这个问题:
按照@Ari的建议开始动画和每个动画刻度更新布局参数。这将使recyclerview的效果改变其大小。然而,从表现角度来看,这是一个可怕的想法。布局和测量过程非常昂贵,因此通常您希望最小化触发布局的调用。致电setLayoutParams
将触发布局&amp;测量RecyclerView +所有孩子的流程,这意味着在每一帧上你都会做一些非常昂贵的工作,这很可能会导致陷害和糟糕的用户体验
还有另外一种方法。它可能不适用于所有情况 - 这一切都取决于你的最终布局,但仍然是我建议做的。想法 - 在开始动画之前让您的recyclerView更高。它需要一些先进的Android技能。基本上你需要覆盖onMeasure
&amp;您的RecyclerView中的layout
方法(您实际上需要扩展RecyclerView类来执行此操作)。
true
并请求新的布局。这将重新布局recyclelerView,底部有一些看不见的部分。false
,并将标题的可见性更改为GONE
,因为它现在不在屏幕上以下是有关实现自定义onMeasure
逻辑的一些信息:
https://medium.com/android-news/perfmatters-introduction-to-custom-viewgroups-to-improve-performance-part-2-f14fbcd47c