为什么我的布局在其兄弟改变其大小之前查看其大小的动画?

时间:2015-07-21 05:36:40

标签: android android-layout android-animation

我有一个简单的布局,有4个LinearLayout组,每个组都有不同类型的视图。我想要做的就是让LinearLayouts"崩溃"从屏幕上开始。将孩子的知名度提升到View.GONE。在每个布局上,以及布局的父级,我有android:animateLayoutChanges =" true"因此,当我单击布局(设置为可点击)时,其子项的可见性将设置为View.VISIBLE,从而很好地扩展其父LinearLayout。

当我将其可见性设置为View.VISIBLE时,所有这一切都正常,但是当我再次单击它时,我将其设置回View.GONE,以便LinearLayout缩小。

我面临的问题是,当它缩小时,看起来LinearLayout的高度在它开始制作动画之前就会立即更新,因此它下面的兄弟会立即向上动画,看起来很快。

这是一个关于发生了什么的小动画:

enter image description here

当我将可见性设置为View.GONE时,我可以告诉孩子(DatePicker)开始淡出。

以下是一些代码,用于说明我是如何接近这一点的(不相关的项目被遗漏了):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layoutMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    tools:context=".QuickAddMain">

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:animateLayoutChanges="true"
            android:clipChildren="false"
            android:orientation="vertical">

        <LinearLayout
                android:id="@+id/testGroup03"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="5dp"
                android:animateLayoutChanges="true"
                android:background="@drawable/section_background"
                android:orientation="vertical">

                <LinearLayout
                    android:id="@+id/testTitle03Clickable"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="?android:selectableItemBackground"
                    android:clickable="true">

                    <TextView
                        android:id="@+id/testTitle03"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="10dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginTop="5dp"
                        android:text="Test Title 03"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textStyle="bold" />

                </LinearLayout>

                <DatePicker
                    android:id="@+id/datePicker"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:calendarViewShown="false"
                    android:datePickerMode="spinner"
                    android:visibility="gone" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/testGroup04"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="70dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="5dp"
                android:animateLayoutChanges="true"
                android:background="@drawable/section_background"
                android:orientation="vertical"
                android:layout_below="@+id/dateGroup">

                <LinearLayout
                    android:id="@+id/testTitle04Clickable"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="?android:selectableItemBackground"
                    android:clickable="true">

                    <TextView
                        android:id="@+id/testTitle04"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="10dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginTop="5dp"
                        android:text="Test Title 04"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textStyle="bold" />

                </LinearLayout>

                <TimePicker
                    android:id="@+id/timePicker"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:timePickerMode="spinner"
                    android:visibility="gone" />
            </LinearLayout>

        </RelativeLayout>
    </ScrollView>

爪哇:

LayoutTransition layoutTransition;

layoutTransition = dateGroup.getLayoutTransition();
layoutTransition.enableTransitionType(LayoutTransition.CHANGING);

layoutTransition = timeGroup.getLayoutTransition();
layoutTransition.enableTransitionType(LayoutTransition.CHANGING);
    dateActivation = (LinearLayout) findViewById(R.id.dateActivation);
    dateActivation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (datePicker.getVisibility() == View.GONE) {
                datePicker.setVisibility(View.VISIBLE);
            } else {
                datePicker.setVisibility(View.GONE);
            }
        }
    });

    timeActivation = (LinearLayout) findViewById(R.id.timeActivation);
    timeActivation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (timePicker.getVisibility() == View.GONE) {
                timePicker.setVisibility(View.VISIBLE);
            } else {
                timePicker.setVisibility(View.GONE);
            }
        }
    });

如果我遗漏任何内容或有任何需要澄清的事项,请告诉我。感谢。

0 个答案:

没有答案