将可见性更改为消失时的 animateLayoutChanges 错误

gre*_*gaj 5 android android-animation android-layout android-linearlayout android-fragments

我有一个带有几个视图的列表(容器),当单击折叠/展开按钮时,我想隐藏并再次显示。

到目前为止没问题,现在我想为嵌套视图的隐藏和显示设置动画,我不想使动画复杂化,我使用默认的动画。

这就是为什么我将 android:animateLayoutChanges="true" 添加到容器布局的原因,这在显示/展开视图时效果很好,但在隐藏/折叠视图时看起来很糟糕。

这种行为背后有什么特别的原因吗?

代码和示例如下:

在此处输入图片说明

代码

容器布局

            <LinearLayout
                android:id="@+id/izdelek_podrponud_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:animateLayoutChanges="true"
                >

            </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

子视图布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/spacing_medium"
android:paddingBottom="@dimen/spacing_medium"
android:gravity="center_vertical">

<View
    android:layout_width="5dp"
    android:layout_height="5dp"
    android:background="@color/colorPrimary"/>
<TextView
    android:id="@+id/row_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/spacing_small"
    android:textSize="@dimen/font_size_60px"
    android:textColor="@color/black"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这就是我处理显示和隐藏的方式;

private void showViews(LinearLayout container, int visible, boolean show) {
    if (container.getChildCount() > visible) {
        for (int i = visible; i < container.getChildCount(); i++) {
            if (show) {
                container.getChildAt(i).setVisibility(View.VISIBLE);
            } else {
                container.getChildAt(i).setVisibility(View.GONE);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)