我有LinearLayout
,我在父android:animateLayoutChanges="true"
中应用了LinearLayout
。当用户点击切换按钮时,LinearLayout
“折叠”(我以编程方式将视图的可见性设置为LinearLayout.GONE
,当他们再次单击它时,它会通过以编程方式将可见性设置回{{1 }}
它的折叠和扩展动画正常工作。
但是,在折叠动画完成之前,可折叠/可展开LinearLayout.VISIBLE
下方的任何项目都会回到顶部。正在回溯的项目不在LinearLayout
设置为animateLayoutChanges
的父项中,我认为没有任何方法可以将它们放入其中。
这是我的布局层次结构(我没有提到保持简短的属性):
true
整个布局以编程方式插入另一个<!-- Top most LinearLayout-->
<LinearLayout>
<!-- LinearLayout containing android:animateLayoutChanges="true"-->
<LinearLayout>
<!-- RelativeLayout containing button to toggle LinearLayout visibility below-->
<RelativeLayout>
</RelativeLayout>
<!-- LinearLayout that has its visibility toggled -->
<LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
(见下文):
LinearLayout
我意识到,如果我添加<LinearLayout
android:id="@+id/form_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- This is where the previous XML layout containing the toggle-able LinearLayout
is inserted programmatically. -->
<!-- This button snaps back up to the top before the animation is complete. -->
<Button />
</LinearLayout>
,并将Button
与LinearLayout
匹配为真,我就会解决问题。但是,由于一些原因,这不是一种选择。
还有其他工作吗?
答案 0 :(得分:1)
而不是使用animateLayoutChanges
尝试添加
您的onClick方法中TransitionManager.beginDelayedTransition(transitionsContainer);
transitionsContainer
是应该设置动画的视图的父级。
例如,您的父布局是
<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
}
});
查看https://medium.com/@andkulikov/animate-all-the-things-transitions-in-android-914af5477d50了解详情。
答案 1 :(得分:0)
只是想一想......如果从嵌入式布局中删除'animateLayoutChanges'并将其添加到父布局(第二个XML),该怎么办?我怀疑这会激发一切。您可能必须在代码中将属性设置为true,因为您是以编程方式嵌入布局。
以下是如何以编程方式执行此操作 Stack-overflow
另一种选择是以编程方式在按钮上使用.animate属性
myButton.animate().translationY(floatYposition).setDuration(300); //300 milliseconds
答案 2 :(得分:0)
对于线性布局,请尝试也手动启用“更改”过渡 看看它的框架布局..尝试线性布局.. https://stackoverflow.com/a/51116293/2719243