Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用";animateLayoutChanges“;XML中的属性_Android_Xml_Android Layout_Android Animation - Fatal编程技术网

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           
    }
});