LayoutTransition - 扩展容器不会推送其他容器

pde*_*d59 5 android

你好Android开发者!

Nota:帖子末尾的所有代码.

我希望只要其中一个子视图通过平滑展开动画变为可见,就可以为其设置动画.借助于LayoutTransition此扩展/折叠动画,没有任何问题.

但问题是动画ViewGroup是"复杂"的一部分LinearLayout.

ViewGroup's高度设置为wrap_content另一个ViewGroup,在动画ViewGroup下方具有0dp高度,权重设置为1以适合屏幕上的所有剩余空间.

每当动画ViewGroup扩展时,由于垂直占用更多空间,底部ViewGroup应缩小以使顶部ViewGroup具有扩展所需的空间.我希望这个底部ViewGroup也能用动画缩小.

不起作用的是,ViewGroup当第一个动画ViewGroup开始时,底部会立即调整大小.我尝试将LayoutTransition对象添加到底部ViewGroup或全局根ViewGroup,但似乎没有什么可以解决问题.

有没有人设法做过这样的动画?我希望这与4.0兼容.(没有LayoutTransition.CHANGING然后...:s)

谢谢您的帮助 !

现在代码:

my_activity.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="@dimen/actionbar_height"
    android:background="@drawable/bg_texture_black"
    android:orientation="vertical">

    <!-- This is the layout with the LayoutTransition instance -->
    <LinearLayout
        android:id="@+id/layout_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="@dimen/dimen_margin_xlarge"
        android:paddingRight="@dimen/dimen_margin_xlarge"
        android:paddingTop="@dimen/dimen_margin_medium"
        android:paddingBottom="@dimen/dimen_margin_medium"
        android:background="@drawable/bg_black_gradient_to_top"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"
            android:textSize="@dimen/font_size_xxlarge"
            android:text="@string/text_my_documents"/>

        <!-- This is the layout with the extra content that is hidden/shown to trigger the animation -->
        <RelativeLayout
            android:id="@+id/layout_search_parameters"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dimen_margin_medium"
                android:textColor="@android:color/white"
                android:textSize="@dimen/font_size_medium"
                android:text="TEST"/>

        </RelativeLayout>

    </LinearLayout>

    <!-- The bottom layout that fit all the remaining space vertically -->
    <LinearLayout
        android:id="@+id/layout_central"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:background="@color/debug">

    </LinearLayout>

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

MyActivity.java:

// activity initialization is hidden. This method is triggered whenever the title is clicked. It open the extra layout in the header ViewGroup.
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void openSearchParametersView() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        LayoutTransition transitioner = new LayoutTransition();
        transitioner.disableTransitionType(LayoutTransition.APPEARING);
        transitioner.setStartDelay(LayoutTransition.APPEARING, 0);
        transitioner.setStartDelay(LayoutTransition.DISAPPEARING, transitioner.getDuration(LayoutTransition.CHANGE_DISAPPEARING));
        transitioner.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0);
        headerViewGroup.setLayoutTransition(transitioner);
        centralViewGroup.setLayoutTransition(new LayoutTransition()); // this does nothing :(
    }
    searchParametersView.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)