3

我有一种情况,我有一个自定义布局,其中包含一堆孩子,并且我将其膨胀到 ViewFlipper 中。

我的问题是 ViewFlipper 在尝试为 Layout 设置动画时会严重卡顿其动画,即使 Layout 仍在加载其所有子视图。

我尝试使用onLayout,但是在父布局完成膨胀的那一刻被调用(它不会等待子视图膨胀,所以口吃仍然存在)

我也尝试过 onMeasure,但它被调用了几十次,并且每次布局中的任何内容发生更改(例如 EditText 获得焦点或更改值)时都会被调用。

所以,我很难过......当布局完全膨胀时,我可以听到*任何事情,以便我可以告诉 Flipper 执行动画吗?

4

2 回答 2

8

您可以在自定义布局中覆盖onFinishInflate()。在添加了所有子视图之后,这称为膨胀的最后阶段。

于 2013-08-17T02:54:32.233 回答
3

你可以使用一个OnPreDrawListener. 这将在 View 将要绘制其第一帧之前立即调用,此时将布置所有子项。

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;
    }
});
于 2013-08-17T02:47:06.010 回答