即使我使用handler.postDelayed

时间:2018-12-30 16:52:22

标签: android

我有两个RelativeLayout,将它们的可见性设置为

android:visibility="gone"

然后在活动的根元素(也是RelativeLayout)上,我添加了此属性

android:animateLayoutChanges="true"

这是我的活动Java代码

RelativeLayout rellay1, rellay2;
Handler handler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    rellay1 = findViewById(R.id.rellay1);
    rellay2 = findViewById(R.id.rellay2);

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            rellay1.setVisibility(View.VISIBLE);
            rellay2.setVisibility(View.VISIBLE);
        }
    }, 2000);

}

当我运行该应用程序时,视图将立即显示,而无需任何等待。如果我将时间增加到5s,结果仍然相同。

我在开始活动时查看了日志,没有任何可疑之处。

注意

在回答关于SO的问题时,有时会发现在XML混乱的情况下很难理解用户的问题,因此我尽力保持问题的整洁。但这可能不足以诊断我的代码出了什么问题,因此我为父级和两个子级RelativeLayouts添加了xml的最小版本,而没有它们的内容,只是属性。如果需要更多详细信息,我很乐意提供。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:animateLayoutChanges="true"
    android:background="@drawable/grad_bg"
    tools:context=".LoginActivity">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginRight="40dp"
        android:layout_marginLeft="40dp">

        <ImageView
            android:id="@+id/img_view_logo"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@drawable/ic_android_black_24dp"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"/>

        <RelativeLayout
            android:id="@+id/rellay1"
            android:layout_below="@+id/img_view_logo"
            android:layout_width="wrap_content"
            android:visibility="gone"
            android:layout_height="wrap_content">

        </RelativeLayout>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rellay2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:visibility="gone"
        android:layout_alignParentBottom="true">


    </RelativeLayout>
</RelativeLayout>

从上面的XML中,您将看到我的意图是只让ImageView最初可见,其余的应该在2s之后变得可见。

我也曾对Handler @ postDelayed提出过类似的问题,但问题与我的不完全相同,因此解决方案不适用。

更新

这里唯一的问题似乎是我对android生命周期缺乏适当的了解(我是这里的初学者)。我通过杀死所有正在运行的应用程序进行了实验,然后尝试再次启动应用程序,然后看到了动画。

所以我想这里发生的事情是,该视图已经创建,并且即使我退出了该应用程序,我的活动仍处于活动状态,因此该应用程序的后续启动加载了先前保存的活动实例,这就是为什么看起来好像动画不起作用。

0 个答案:

没有答案