Android 使用";animateLayoutChanges“;XML中的属性
我有一个Android 使用";animateLayoutChanges“;XML中的属性,android,xml,android-layout,android-animation,Android,Xml,Android Layout,Android Animation,我有一个LinearLayout,我在父LinearLayout中为其应用android:animateLayoutChanges=“true”。当用户单击切换按钮时,LinearLayout将“折叠”(我以编程方式将视图的可见性设置为LinearLayout.GONE,当他们再次单击时,它将通过编程方式将可见性设置回LinearLayout.VISIBLE而展开 它折叠和展开的动画工作正常 但是,在折叠动画完成之前,可折叠/可扩展线性布局下的所有项目都会弹回到顶部。正在弹回去的项目不在父级中,
LinearLayout
,我在父LinearLayout
中为其应用android:animateLayoutChanges=“true”
。当用户单击切换按钮时,LinearLayout
将“折叠”(我以编程方式将视图的可见性设置为LinearLayout.GONE
,当他们再次单击时,它将通过编程方式将可见性设置回LinearLayout.VISIBLE
而展开
它折叠和展开的动画工作正常
但是,在折叠动画完成之前,可折叠/可扩展线性布局下的所有项目都会弹回到顶部。正在弹回去的项目不在父级中,父级的animateLayoutChanges
设置为true
,我认为我无法将它们放在父级中
这是我的布局层次结构(我没有提到保持简短的属性):
我意识到如果我添加了按钮
,该按钮将捕捉到线性布局
,该布局将animateLayoutChanges
设置为true,那么问题将得到解决。但是,出于以下原因,这不是一个选项
那么还有其他解决方法吗?只是一个想法……如果从嵌入的布局中删除“animateLayoutChanges”并将其添加到父布局(第二个XML)中会怎么样?我怀疑这会使所有内容都具有动画效果。您可能必须在代码中将属性设置为true,因为您是以编程方式嵌入布局的
下面是如何以编程方式完成它
另一个选项是以编程方式在捕捉回的按钮上使用.animate属性
myButton.animate().translationY(floatYposition).setDuration(300); //300 milliseconds
不要使用animateLayoutChanges
尝试添加
TransitionManager.begindelayedttransition(transitioncontainer);
在onClick方法中,其中transitioncontainer
是应设置动画的视图的父视图
例如,您的父布局是
<LinearLayout android:id="@+id/transitions_container">
<!--add your widgets here-->
</LinearLayout>
查看详细信息。对于线性布局,请尝试手动启用“更改”转换
看看这个框架布局..试试你的线性布局。。
myButton.animate().translationY(floatYposition).setDuration(300); //300 milliseconds
<LinearLayout android:id="@+id/transitions_container">
<!--add your widgets here-->
</LinearLayout>
final ViewGroup transitionsContainer = (ViewGroup) view.findViewById(R.id.transitions_container);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TransitionManager.beginDelayedTransition(transitionsContainer);
// do your staff with changing children of transitionsContainer
}
});