Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 初始化期间何时从onSizeChanged()获取视图大小_Android_Android Canvas_Android Lifecycle - Fatal编程技术网

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

Android 初始化期间何时从onSizeChanged()获取视图大小,android,android-canvas,android-lifecycle,Android,Android Canvas,Android Lifecycle,我试图在应用程序初始化期间使用视图的宽度和高度,但它始终返回0。我在这里读了很多问题,但是没有一个有效,我总是得到0分 在我的应用程序中,我有一个画布,我需要将它的大小传递给另一个使用它进行计算的对象。在canvas中,我使用变量widthaheight来存储大小,在MyActivity中初始化期间,它们被传递到该计算中。问题是,它总是返回0,即使我尝试使用getWidth()和getHeight() 我还尝试在onResume()中检索大小,但似乎画布的onSizeChanged()仍然没有被

我试图在应用程序初始化期间使用视图的宽度和高度,但它始终返回0。我在这里读了很多问题,但是没有一个有效,我总是得到0分

在我的应用程序中,我有一个画布,我需要将它的大小传递给另一个使用它进行计算的对象。在canvas中,我使用变量
width
a
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;
}

因此,我想知道在活动生命周期中何时调用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()中获取大小?