Android 初始化期间何时从onSizeChanged()获取视图大小
我试图在应用程序初始化期间使用视图的宽度和高度,但它始终返回0。我在这里读了很多问题,但是没有一个有效,我总是得到0分 在我的应用程序中,我有一个画布,我需要将它的大小传递给另一个使用它进行计算的对象。在canvas中,我使用变量Android 初始化期间何时从onSizeChanged()获取视图大小,android,android-canvas,android-lifecycle,Android,Android Canvas,Android Lifecycle,我试图在应用程序初始化期间使用视图的宽度和高度,但它始终返回0。我在这里读了很多问题,但是没有一个有效,我总是得到0分 在我的应用程序中,我有一个画布,我需要将它的大小传递给另一个使用它进行计算的对象。在canvas中,我使用变量widthaheight来存储大小,在MyActivity中初始化期间,它们被传递到该计算中。问题是,它总是返回0,即使我尝试使用getWidth()和getHeight() 我还尝试在onResume()中检索大小,但似乎画布的onSizeChanged()仍然没有被
width
aheight
来存储大小,在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;
}
因此,我想知道在活动生命周期中何时调用onSizeChanged()方法。您可以使用在视图显示之前调用的
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();
}
}
});
yourView.getViewTreeObserver().addOnGlobalLayoutListener(新的ViewTreeObserver.OnGlobalLayoutListener()){
@凌驾
公共图书馆{
//通过删除侦听器防止多次调用
if(Build.VERSION.SDK\u INT
谢谢,这很有效。但我仍然不知道这些方法的调用顺序,所以一旦有人解释了,我就会接受。当版面在onCreate()
中膨胀时,为什么我无法在onResume()中获取大小?