我对android布局转换框架有疑问。特别是我希望实现布局的某个部分向下或向上滑动的效果,具体取决于另一个视图的可见性。
想象一下以下布局。 (请在这里忽略嵌套的LinearLayouts;))
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:id="@+id/changingView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
<View
android:id="@+id/changingView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
</LinearLayout>
<LinearLayout
android:id="@+id/movingView"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="false"/>
</LinearLayout>
现在我想要实现的是,当 changingView1 和 changingView2 更改其 movingView 向上或向下滑动的可见性时。
通过为父布局启用 LayoutTransition.CHANGING ,滑动部件可以正常工作。但这有副作用,当添加或删除项目时, movingView 也会被动画化,因为此布局会更改其边界。这就是我的问题,因为这会产生一个非常奇怪的动画。
回到我的问题。有没有办法保持滑动动画而不动画 movingView 上的布局绑定更改?
在 movingView 上禁用layoutTransitions显然没有帮助,因为这只会影响子视图的动画。我也试过在父布局上启用和禁用不同的LayoutTransitions但到目前为止没有达到预期的效果。
如果我可以添加更多详细信息,请告诉我,否则我希望有人可以帮助我。
提前致谢!
答案 0 :(得分:1)
我知道它已经很晚了,但希望它可以帮助别人。由于android:animateLayoutChanges
是直接父级的属性,因此您可以将View
/ Layout
包裹在FrameLayout
(或其他ViewGroup
}中并设置{{ 1}}在新的父母身上。
答案 1 :(得分:0)
为避免不必要的动画,可以在需要时通过代码删除动画布局更改,如下所示:
//removing the animate layout changes to prevent the default animation for the newly added items
parentLayout.setLayoutTransition(null);
/* do some logic to add the new views */
//add the animate layout changes back so the over changes will be still animated
new Handler().post(() -> {parentLayout.setLayoutTransition(new LayoutTransition());});