如何在视图及其子视图完成加载之后运行一个函数,就像在iOS中一样(viewDidAppear / viewDidLayoutSubviews)
我基本上想在程序加载后运行UI动画,但由于我的程序太重(并且有很多子视图),动画根本没有运行(我试过handler.postDelayed并且它工作正常,但我想要要知道更有效的方法(出于性能原因,我测试的手机很老,需要4秒才能加载,而另一部只需要一秒钟,等等。)
答案 0 :(得分:0)
我认为你可以使用ViewTreeObserver来表达here。 你会有类似的东西:
yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// do something here but make sure you unregister if you just want to get notified only once..
}
});
开发者页面说明了以下内容:Register a callback to be invoked when the global layout state or the visibility of views within the view tree changes
然后,您可以在活动的根视图中添加此侦听器,例如在onCreate中,在该方法中可以执行动画。
只要布局状态或视图的可见性发生变化,就会调用该方法。它与viewDidAppear不同,但它类似于“viewDidLayoutSubviews”。
您也可以尝试在onResume中运行动画,但只要第一次创建活动并且我不确定您是否需要,活动就会运行动画。