我有一个简单的布局,有4个LinearLayout组,每个组都有不同类型的视图。我想要做的就是让LinearLayouts"崩溃"从屏幕上开始。将孩子的知名度提升到View.GONE。在每个布局上,以及布局的父级,我有android:animateLayoutChanges =" true"因此,当我单击布局(设置为可点击)时,其子项的可见性将设置为View.VISIBLE,从而很好地扩展其父LinearLayout。
当我将其可见性设置为View.VISIBLE时,所有这一切都正常,但是当我再次单击它时,我将其设置回View.GONE,以便LinearLayout缩小。
我面临的问题是,当它缩小时,看起来LinearLayout的高度在它开始制作动画之前就会立即更新,因此它下面的兄弟会立即向上动画,看起来很快。
这是一个关于发生了什么的小动画:
当我将可见性设置为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);
}
}
});
如果我遗漏任何内容或有任何需要澄清的事项,请告诉我。感谢。