我正在尝试使用onSizeChanged()视图在应用初始化期间获取视图的宽度和高度,但它总是返回0.我在这里读了很多问题,但没有一个有效,我总是得到0
在我的应用程序中,我有一个画布,其大小我需要传递给另一个使用它进行计算的对象。在canvas中,我有变量width
和height
来存储大小,在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()方法。
答案 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();
}
}
});