如何像iOS (viewDidAppear / viewDidLayoutSubviews)那样在视图及其子视图加载完成后运行函数
我基本上想在程序加载后运行一个UI动画,但由于我的程序太重(并且有很多子视图),动画根本不能运行(我尝试了handler.postDelayed,它工作得很好,但我想知道更有效的方法来做到这一点(出于性能原因,我测试的手机很旧,加载需要4秒,而另一部手机只需要一秒钟,等等)。
发布于 2018-04-27 20:22:06
我认为您可以像here那样使用ViewTreeObserver实现这一点。您将拥有类似以下内容的内容:
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中运行动画,但这将在活动恢复时运行动画,而不仅仅是在您第一次创建它时,我不确定您是否愿意这样做。
https://stackoverflow.com/questions/50062022
复制相似问题