Android 仅当另一个元素出现/消失时,对边距和宽度/高度的更改才起作用
我设置了一个简单的活动,试图把这个问题归结起来。 我有一个框架布局,其中启用了“AnimateLayoutchanges”。 我有一个按钮,点击它可以改变文本视图的布局边距和宽度。 如果这是唯一的布局更改,则边距和宽度的更改将不会设置动画。但是,如果我简单地将可见性设置为同一FrameLayout的另一个子级,则可见性更改和边距/宽度更改都将设置动画 旁注:可见性和边距+宽度的更改将按顺序进行,而不是同时进行,是否有方法更改此行为Android 仅当另一个元素出现/消失时,对边距和宽度/高度的更改才起作用,android,Android,我设置了一个简单的活动,试图把这个问题归结起来。 我有一个框架布局,其中启用了“AnimateLayoutchanges”。 我有一个按钮,点击它可以改变文本视图的布局边距和宽度。 如果这是唯一的布局更改,则边距和宽度的更改将不会设置动画。但是,如果我简单地将可见性设置为同一FrameLayout的另一个子级,则可见性更改和边距/宽度更改都将设置动画 旁注:可见性和边距+宽度的更改将按顺序进行,而不是同时进行,是否有方法更改此行为 <LinearLayout xmlns:android="
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#888"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".activities.TestActivity">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/PivotTheme" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="buttonHandler"
android:text="test button 1" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:background="@color/white">
<TextView
android:id="@+id/testTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/purple_gradient_end"
android:text="TestView" />
<TextView
android:id="@+id/testTv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:background="@color/purple_gradient_end"
android:text="TestView" />
</FrameLayout>
</LinearLayout>
我觉得这是安卓系统的一个缺陷,在安卓系统中,边距或宽度的变化无法设置触发动画的标志,但如果通过改变可见性来设置该标志,那么所有动画都会得到正确处理 对于该类型的更改..如更改参数..您也需要启用“更改”(animateLayoutChange必须为true)
val frmMain=findviewbyd(R.id.frmMain)
val currentTransitions=frmMain.layoutTransition
currentTransitions.enableTransitionType(LayoutTransition.Changeing)
frmMain.layoutTransition=currentTransitions
public void buttonHandler(View view){
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) testTv.getLayoutParams();
if(testDown) {
params.setMargins(100, 400, 0, 0);
params.width = 400;
testTv2.setVisibility(View.GONE);// if I comment out this line, nothing will animate
testDown = false;
} else {
params.setMargins(0, 0, 0, 0);
params.width = 100;
testTv2.setVisibility(View.VISIBLE);
testDown = true;
}
testTv.setLayoutParams(params);
}
val frmMain=findViewById<FrameLayout>(R.id.frmMain)
val currentTransitions=frmMain.layoutTransition
currentTransitions.enableTransitionType(LayoutTransition.CHANGING)
frmMain.layoutTransition=currentTransitions