我的情况是我有一个自定义布局,其中包含一堆子项,并且我将其扩展为ViewFlipper。
我的问题是,当ViewFlipper尝试为布局设置动画时,它会严重破坏动画,即使布局仍在加载其所有子视图。
我尝试使用onLayout,但是在父布局完成膨胀的时候会调用它(它不会等待子视图膨胀,因此口吃仍然存在)
我也尝试过onMeasure,但是这几次被调用并且每次布局中的任何内容发生变化时都会被调用(例如EditText获得焦点或更改值)。
所以,我很难过......当布局完全膨胀时,我可以听到任何事情发生,我可以告诉Flipper执行动画吗?
答案 0 :(得分:6)
您可以在自定义布局中覆盖onFinishInflate()。在所有儿童观点被添加之后,这被称为通胀的最后阶段。
答案 1 :(得分:2)
您可以使用OnPreDrawListener
。这将在视图绘制第一帧之前立即调用,此时所有子项都将被布局。
CustomView myCustomView = (CustomView) findViewById(R.id.my_custom_view);
final ViewTreeObserver obs = myCustomView.getViewTreeObserver();
obs.addOnPreDrawListener(new OnPreDrawListener () {
@Override
public boolean onPreDraw () {
//We only care the first time it happens, so remove it
obs.removeOnPreDrawListener(this);
//Post your animation here, then return true
return true;
}
});