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

时间:2014-04-03 09:40:29

标签: android

Hello 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>

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);
}

0 个答案:

没有答案