我有两个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生命周期缺乏适当的了解(我是这里的初学者)。我通过杀死所有正在运行的应用程序进行了实验,然后尝试再次启动应用程序,然后看到了动画。
所以我想这里发生的事情是,该视图已经创建,并且即使我退出了该应用程序,我的活动仍处于活动状态,因此该应用程序的后续启动加载了先前保存的活动实例,这就是为什么看起来好像动画不起作用。