当位置因高度变化而改变时,为RelativeLayout子项设置动画

时间:2015-04-13 16:03:54

标签: android android-layout

我的Android应用程序中有这种布局(我将它用作启动画面和主菜单屏幕。

这是XML

<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.izzivizzi.avant2go.ACMainActivity"
android:background="@mipmap/wallpaper"
android:orientation="vertical"
android:animateLayoutChanges="true">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    ...................

</RelativeLayout>

<LinearLayout
    android:id="@+id/mainMenuButtons"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2"
    android:layout_marginTop="@dimen/margin_middle"
    android:orientation="vertical"
    android:visibility="gone">

    ...................

</LinearLayout>

</LinearLayout>

它应该做什么

首次启动Activity时,只显示RelativeLayout的权重为1,这意味着子项显示在屏幕中间(它是一个文本视图和一些图像,但我认为&#39 ;这里的冗余信息)。

几秒钟后,LinearLayout的可见性设置为VISIBLE,权重为2,这意味着它将顶层RelativeLayout推高。

现在,由于主要的LinearLayout的animateLayoutChanges设置为true,我期待RelativeLayout的孩子将动画到他们的新位置(朝向屏幕顶部)并且新的LinearLayout元素将慢慢地出现。

嗯,LinearLayout确实缓慢出现,但RelativeLayout的孩子只是闪烁,因为RelativeLayout位置实际上并没有改变,只是改变了它的高度。

问题

现在,由于RelativeLayout的孩子只是眨眼而不是动画,我需要找到一种方法将它设置为顶部,同时LinearLayout慢慢显示。

我将非常感谢这个问题的解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

为什么不在代码中添加线性布局,而不是切换可见性?

您可以将其保留在布局文件中,只需获取对它的引用:然后在运行几秒后将其删除,然后将其添加回来(确保使用具有权重设置的适当布局参数)。