发生布局更改时动画

Posted

技术标签:

【中文标题】发生布局更改时动画【英文标题】:Animate when layout change occurs 【发布时间】:2015-09-03 03:26:42 【问题描述】:

在我的 android 应用程序活动布局中,我有一个 LinearLayout 和 RecyclerView,LinearLayout 包含一个 EditText 和 TextField,而 RecyclerView 位于 LinearLayout 下方。

<LinearLayout 
  android:orientation="vertical">
  <LinearLayout 
    android:orientation="vertical">
     <EditText>
     <TextView>
  </LinearLayout>
  <RecyclerView/>
</LinearLayout>

有时我必须删除位于 RecyclerView 上方的 LinearLayout。所以我通过提供一些动画效果来隐藏它

LinearLayout.animate().translationY(-LinearLayout.getHeight()).setInterpolator(new DecelerateInterpolator()).alpha(0.0f).setListener(new AnimatorListenerAdapter() 
            @Override
            public void onAnimationEnd(Animator animation) 
                super.onAnimationEnd(animation);
                LinearLayout.setVisibility(View.GONE);
            
        ).setDuration(HEADER_HIDING_ANIMATION_DURATION);

当动画结束时,视图设置为 GONE。然后下面的 RecyclerView 跳到顶部,它只是在没有任何动画的情况下跳转,有没有办法管理它?布局更改的小动画可能对我有所帮助。我在xml中尝试过,但它会引发一些错误。

【问题讨论】:

【参考方案1】:

有一种简单的方法可以为布局更改设置动画。 只需将 xml 下一个属性放入

<LinearLayout 
    android:animateLayoutChanges="true"  <====
    android:orientation="vertical">
    <LinearLayout 
        android:orientation="vertical">
        <EditText>
        <TextView>
    </LinearLayout>
    <RecyclerView/>
</LinearLayout>

然后在代码中将第二个 LinearLayout 的可见性更改为 GONE/VISIBLE。

更多信息可以在这里找到:link to Android Docs

【讨论】:

以上是关于发生布局更改时动画的主要内容,如果未能解决你的问题,请参考以下文章

捏和缩放 RecyclerView 布局以动画和更改布局管理器跨度计数

自定义布局中约束更改的动画 UICollectionView 项目

Flutter 中的动画布局更改

为更改布局高度添加动画

浮动 div 的 CSS3 动画布局更改

UIScrollView 布局更改