何时在初始化期间从onSizeChanged()获取视图大小

时间:2016-02-12 10:04:00

标签: android android-canvas android-lifecycle

我正在尝试使用onSizeChanged()视图在应用初始化期间获取视图的宽度和高度,但它总是返回0.我在这里读了很多问题,但没有一个有效,我总是得到0

在我的应用程序中,我有一个画布,其大小我需要传递给另一个使用它进行计算的对象。在canvas中,我有变量widthheight来存储大小,在MyActivity初始化期间,它们被传递给那个计算。问题是,它总是返回0,即使我尝试使用getWidth()和getHeight()。

我还尝试在onResume()中检索大小,但似乎我的画布的onSizeChanged()仍然没有被调用。

来自MainActivity的

片段

@Override
protected void onResume() {
    super.onResume();

    hB = canvas.getW();
    vB = canvas.getH();


    ap = new ActualPosition();
    generator = new PositionGenerator(ap);
    table = new DrawTable(ap, hB, vB);

    generator.runMe();
}

画布代码

@Override
protected void onSizeChanged(int w, int h, int oldW, int oldH) {
    super.onSizeChanged(w, h, oldW, oldH);

    this.w = w;
    this.h = h;

    Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    canvas = new Canvas(bitmap);
}

public int getW() {
    return w;
}
public int getH() {
    return h;
}

所以我想知道在Activity生命周期中何时调用onSizeChanged()方法。

1 个答案:

答案 0 :(得分:0)

您可以使用在显示视图之前调用的getViewTreeObserver()方法。

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    // prevent multiple calls by removing the listener
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                        grid.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    } else {
                        grid.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }

                    int mWidth = yourView.getWidth();
                    int mHeight = yourView.getHeight();
                    }
                }
            });