在animation制作时,在RecyclerView内部折叠CardView

我想做什么

我有一个CardView ,底部有一个支持文本,默认为GONE 。 我想只在用户点击“操作箭头”时才能看到卡片的这一部分,如下图所示:

展开箭头

我知道我可以通过简单地将View可见性设置为VISIBLE来实现这一点,但我还想为expand和collapse事件设置animation。

问题和我到目前为止所尝试的内容

要做到这一点,我在我的CardView xml上使用了android:animateLayoutChanges="true"属性,它在扩展时工作得很好。 但是,一旦我再次点击箭头折叠支持文本,下面的卡片就会重叠我在animation期间点击过的卡片。 我该如何避免这种重叠?

编辑:我知道有可能做一些像这个问题的解决方案 ,但它似乎过于复杂,因为android:animateLayoutChanges选项存在。 我想知道是否可以使用该XML属性解决我的问题,以保持简单。

我的animation代码如下:

Java代码

 protected void expandCard() { if (isExpanded) { ibt_show_more.animate().rotation(0).start(); isExpanded = false; tv_support.setVisibility(View.GONE); } else { ibt_show_more.animate().rotation(180).start(); isExpanded = true; tv_support.setVisibility(View.VISIBLE); } } 

XML代码

          

GIF的完整性(错误的崩溃行为)

在此处输入图像描述

  • 如何使用appcompat v7创建卡片工具栏
  • Android NestedScrollViewalignment顶部的内容
  • 如何在Android中禁用卡片视图周围的阴影
  • 带有CardView的Android RecyclerView - 以堆栈forms显示卡片(不是列表)
  • 只围绕cardview的顶角
  • 在RecyclerView中的图像奇怪的行为
  • 展开并折叠CardView
  • 回收站内的cardview中的滑动图像的最佳方式是什么?
  • 在更改可见性之前,添加以下代码行:

     TransitionManager.beginDelayedTransition(the rootView containing the cardView, new AutoTransition()); 

    你应该得到一个流畅的animation。 在此之前还要从xml中删除“animateLayoutChanges = true”。

    至于为什么这样做,调用TransitionManager.beginDelayedTransition()使TransitionManger捕获父ViewGroup中的当前值并在下一个animation帧中渲染animation。 在这种情况下传递的Transition是AutoTransition ,它负责处理父ViewGroup中的所有淡入淡出,移动和resize。

    请参见Transitions和TransitionManager

    还要注意在适当的地方使用支持库中的Transitions,或者执行必要的API级别检查。